Prévia do material em texto
1 Introdução à Computação Programa - Definição Um programa é um conjunto de instruções que o computador deve executar passo a passo. É uma seqüência finita de instruções que, quando executadas, resolvem um problema ou desempenham uma tarefa específica. Programar um computador requer duas exigências básicas: Conhecer a linguagem na qual se vai programar; Estruturar o raciocínio de forma a saber combinar os comandos desta linguagem, dentro de uma seqüência lógica, ou seja, de modo a atingirmos o objetivo perseguido. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 1 0:34 0:25 Linguagem de Programação É um conjunto de símbolos (comandos, identificadores, caracteres ASCII, etc.) e regras de sintaxe que permitem a construção de sentenças que descrevem de forma precisa ações compreensíveis e executáveis para o computador. 2 ASCII : American Standard Code for Information Interchange" (Código Padrão Norte-americano para Intercâmbio de Informações) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2 Linguagem de Programação tabela ASCII Binário D H G Binário D H G Binário D H G 0010 0001 33 21 ! 0100 0001 65 41 A 0110 0001 97 61 a 0010 0010 34 22 " 0100 0010 66 42 B 0110 0010 98 62 b 0010 0011 35 23 # 0100 0011 67 43 C 0110 0011 99 63 c 0010 0100 36 24 $ 0100 0100 68 44 D 0110 0100 100 64 d 0010 0101 37 25 % 0100 0101 69 45 E 0110 0101 101 65 e 0010 0110 38 26 & 0100 0110 70 46 F 0110 0110 102 66 f 0010 0111 39 27 ' 0100 0111 71 47 G 0110 0111 103 67 g 0010 1000 40 28 ( 0100 1000 72 48 H 0110 1000 104 68 h 0010 1001 41 29 ) 0100 1001 73 49 I 0110 1001 105 69 i 3 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 3 4 Lógica A Lógica está relacionada ao pensamento racional e ordenado. Na Filosofia, ela se preocupa em estudar por que pensamos do jeito que pensamos. Como arte ou técnica, ela nos induz a usar corretamente as leis do pensamento. É a arte do bem pensar. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 4 5 Algoritmos Um algoritmo é formalmente uma seqüência finita de passos que levam a execução de uma tarefa. Podemos pensar em algoritmo como uma receita, uma seqüência de instruções que tem a função de atingir uma meta específica. Estas tarefas não podem ser redundantes nem subjetivas na sua definição, devem ser claras e precisas. Como exemplos de algoritmos podemos citar os algoritmos das operações básicas de uma calculadora (adição, multiplicação, divisão e subtração de números reais decimais). CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 5 6 Desenvolvendo Algoritmos O algoritmo deve ser fácil de se interpretar e fácil de se codificar. Ele deve ser o intermediário entre a linguagem falada e a linguagem de programação. São independentes das linguagens de programação e não existe um formalismo rígido de como ele deve ser escrito. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 6 7 Fases para construção do Algoritmo Ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em três fases fundamentais. Entrada Processamento Saída São os dados de entrada do algoritmo São os procedimentos utilizados para chegar ao resultado final São os dados já processados O que preciso? Como chegar ao que quero? O que quero? A entrada de dados será feita através da instrução ler A saída de dados será feita através da instrução escrever CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 7 8 Tipos de Algoritmos Fluxogramas (diagramas de bloco ou diagrama de fluxo) Diagrama de Chapin (cartas n-s) Pseudocódigo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 8 NASSI-SHNEIDERMAN Developed in 1972 by Isaac Nassi and Ben Shneiderman, these diagrams are also called structograms, as they show a program's structures. 9 Algoritmo em Diagrama de Chapin (cartas n-s) Fazer um algoritmo para entrar com duas notas e calcular sua média. Sel ela for maior ou igual a 7, apresente o aluno como “Aprovado” senão, apresente o aluno como “Reprovado”. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 9 NASSI-SHNEIDERMAN Developed in 1972 by Isaac Nassi and Ben Shneiderman, these diagrams are also called structograms, as they show a program's structures. 10 Algoritmo em Fluxograma idade>=18 V F Algoritmo Verif_Maioridade Var Idade: inteiro Início Leia Idade Se Idade >=18 Então Escreva “Maior de idade” Senão Escreva “Menor de idade” Fim_se Fim Cmd 1 Cmd 2 Inicio Idade “Maior de idade” “Menor de Idade” Fim Fazer um algoritmo utilizando a Pseudolinguagem para realizar a leitura da idade de indivíduos, sendo que, se a idade for maior ou igual a 18 anos, escrever “Maior de idade”, se for menor que 18 anos, escrever “Menor de idade”. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 10 11 Algoritmo em pseudocódigo Fazer um algoritmo utilizando a Pseudolinguagem para realizar a leitura da idade de indivíduos, sendo que, se a idade for maior ou igual a 18 anos, escrever “Maior de idade”, se for menor que 18 anos, escrever “Menor de idade”. Algoritmo Verif_Maioridade Var Idade: inteiro Início Leia Idade Se Idade >=18 Então Escreva “Maior de idade” Senão Escreva “Menor de idade” Fim_se Fim CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 11 NASSI-SHNEIDERMAN Developed in 1972 by Isaac Nassi and Ben Shneiderman, these diagrams are also called structograms, as they show a program's structures. 12 Estruturas básicas para construção de algoritmos Nas “Operações Lógicas”, verificamos que na maioria das vezes necessitamos tomar decisões no andamento do algoritmo. Essas decisões interferem diretamente no andamento do programa. Trabalharemos com três tipos de estrutura: A estrutura Seqüencial ou Seqüenciação ; A estrutura de Decisão ou Seleção e, A estrutura de Repetição ou Iteração . Estruturas básicas para construção de algoritmos CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 12 13 Estruturas básicas para construção de algoritmos A estrutura Seqüencial ou Seqüenciação ; Estruturas básicas para construção de algoritmos CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 13 14 Estruturas básicas para construção de algoritmos A estrutura de Decisão ou Seleção e, Estruturas básicas para construção de algoritmos CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 14 15 Estruturas básicas para construção de algoritmos A estrutura de Repetição ou Iteração . Estruturas básicas para construção de algoritmos CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 15 16 Ferramentas para construção do Algoritmo Pseudocódigo É uma pseudolinguagem de programação que permite pensarmos no problema e não na máquina que vai executar o algoritmo. Além disso, não perdemos a flexibilidade e continuamos a ter a proximidade com a linguagem humana, facilitando, portanto, a interpretação. PORTUGOL=simbiose do Português com o ALGOL e PASCAL Algoritmo Soma Variaveis A,B, S, : Real Inicio Leia (A,B) S=A+B Escreva (S) Fim algoritmo "soma" var a,b,c: real inicio escreva("Entre com o primeiro numero:") Leia (a) Escreva("Entre com o segundo numero:") Leia (b) c<-a+b Escreval("A soma é:",c) fimalgoritmo Soma.alg Soma sem informacoes.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 16 17 Exemplo Imagine o seguinte problema: calcular a média final dos alunos da 3ª Série. Os alunos realizarão quatro provas: P1, P2, P3 e P4, onde: Média Final =P1+P2+P3+P4 4 Para montar o algoritmo proposto, faremos três perguntas: a)Quaissão os dados de entrada? R: Os dados de entrada são P1, P2, P3 e P4 b) Qual será o processamento a ser utilizado? c) Quais serão os dados de saída? R: Os dados de entrada são P1, P2, P3 e P4 R: O procedimento será somar todos os dados de entrada e dividi-los por 4 R: O dado de saída será a média final CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 17 18 Construindo o Algoritmo do Exemplo Calcular a média final dos alunos da 3ª Série. Os alunos realizarão quatro provas: P1, P2, P3 e P4, onde: Algoritmo Algoritmo Media Variaveis P1,P2,P3,P4,M : Real Inicio Leia (P1,P2,P3,P4) M=(P1+P2+P3+P4)/4 Escreva (M) Fim media.alg algoritmo "media" var media,nota1,nota2,nota3,nota4:real inicio Escreval("Entre com as 4 notas") Leia(Nota1) Leia(Nota2) Leia(Nota3) Leia(Nota4) Media:=(Nota1 + Nota2 + Nota3 +nota4)/4 Escreva(" A media é:",media) fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 18 19 Algoritmo "Media ADS" var Media,NP1,NP2,notaPIM:real inicio Escreval("Entre com as notas das NPs: ") Leia(NP1) Leia(NP2) Escreval("Entre com a nota do PIM: ") Leia(notaPIM) Media:=(4*NP1 + 4*NP2 + 2*NotaPIM)/10 Escreva(" A média final é:",Media) fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 20 Estrutura de um algoritmo em Pseudocódigo: Algoritmo <nome_do_algoritmo> <declaração_de_variáveis> <subalgoritmos> Início <corpo_do_algoritmo> Fim. onde: Algoritmo "Media ADS" var Media, NP1, NP2, notaPIM: real inicio Escreval("Entre com as notas das NPs: ") Leia(NP1) Leia(NP2) Escreval("Entre com a nota do PIM: ") Leia(notaPIM) Media:=(4*NP1 + 4*NP2 + 2*NotaPIM)/10 Escreva(" A média final é:",Media) fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 20 21 Estrutura de um algoritmo – Pseudocódigo (continuação): Algoritmo é uma palavra que indica o início da definição de um algoritmo em forma de pseudocódigo. <nome_do_algoritmo> é um nome simbólico dado ao algoritmo com a finalidade de distinguí-lo dos demais. <declaração_de_variáveis> consiste em uma porção opcional onde são declaradas as variáveis globais usadas no algoritmo principal e, eventualmente, nos subalgoritmos. <subalgoritmos> consiste de uma porção opcional do pseudocódigo onde são definidos os subalgoritmos (funções e procedures) Início e Fim são respectivamente as palavras que delimitam o início e o término do conjunto de instruções do corpo do algoritmo. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 21 Algoritmo Saída de Dados Escreva (“Caracteres”) Escreval(“Caracteres”) 22 Algoritmo “Estrutura" Var Inicio Fimalgoritmo Escreval(“Caracteres”) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exercício Escreva um algoritmo em pseudocódigo para que um software a ser desenvolvido apresente na tela do computador o nome do usuário (seu nome) e o seu endereço: 23 Nome e endereço.alg Algoritmo "Nome e Endereço" Var Inicio Escreval("#########Nome e Endereço#########") Escreval() Escreval(" Meu nome é:") Escreval(" Pedro Carlos da Silva Euphrásio ") Escreval("Meu endereço:") Escreval(" Rua H-30B, número 110") Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exercício Escreva um algoritmo em pseudocódigo para que um software a ser desenvolvido apresente na tela do computador uma receita de bolo. Essa receita deverá inicialmente apresentar na tela os seguintes ingredientes: 2 xícaras (chá) de açúcar; 3 xícaras (chá) de farinha de trigo; 4 colheres (sopa) de margarina; 3 ovos; 1 e 1/2 xícara (chá) de leite; 1 colher (sopa) bem cheia de fermento em pó Posteriormente o algoritmo deverá apresentar o modo de fazer o bolo Bata as claras em neve e reserve. Misture as gemas, a margarina e o açúcar até obter uma massa homogênea. Acrescente o leite e a farinha de trigo aos poucos, sem parar de bater. Por último, adicione as claras em neve e o fermento. Despeje a massa em uma forma grande de furo central untada e enfarinhada. Asse em forno médio 180 °C, preaquecido, por aproximadamente 40 minutos ou ao furar o bolo com um garfo, este saia limpo. 24 Receita de Bolo,alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Algoritmo Entrada de Dados Ler (Var) Saída de Dados Escreval(“frase e ”, variável) 25 Algoritmo “Estrutura" Var Nome: caractere Inicio Fimalgoritmo Leia(nome) Escreva(“Entre com o Nome”) Escreva(“Nome: ”, nome) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exercício Escreva um algoritmo em pseudocódigo para que um software a ser desenvolvido solicite o nome e a rua em que o usuário reside e logo após faça a impressão dessas informações na tela do computador 26 Nome e endereço2.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 27 Algoritmo "Nome e Endereço" Var N1, Rua:caractere Inicio Escreval("#########Nome e Endereço#########") Escreval() //Entrada de Dados Escreval(" Entre com o seu nome:") Leia( N1 ) Escreval(" Entre com a rua em que reside:") Leia( Rua ) //saída de dados Escreva(" O nome do usuário é: ") Escreval( N1 ) Escreva(" O nome da rua em que reside é: ") Escreva( Rua ) Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exercício Escreva um algoritmo em pseudocódigo para que um software a ser desenvolvido solicite do usuário as seguintes informações: nome, rua, número, bairro, CEP e cidade. O algoritmo deverá fazer a impressão de todas as informações na tela do computador 28 Nome e endereço3.alg Algoritmo "Nome e Endereço" Var N1, Rua:caractere Inicio Escreval("#########Nome e Endereço#########") Escreval() //Entrada de Dados Escreval(" Entre com o seu nome:") Leia( N1 ) Escreval(" Entre com a rua em que reside:") Leia( Rua ) //saída de dados Escreva(" O nome do usuário é: ") Escreval( N1 ) Escreva(" O nome da rua em que reside é: ") Escreva( Rua ) Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 29 Exercício: construa um algoritmo para determinar realizar a divisão entre dois números reais, obedecendo a fórmula ao lado”. X := A / B Algoritmo "Soma" Var S,A,B: real Inicio Escreval("Algoritmo soma de dois números") Escreval("Entre com os dois números") Leia (A,B) S := A + B Escreva ("A soma dos números é:",S) Fimalgoritmo Soma Algoritmo “Soma” Var S,A,B: real Inicio Leia (A,B) S = A + B Escreva (S) Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 29 30 Exercício: construa um algoritmo para determinar a velocidade final “V” de um veículo sabendo-se a velocidade inicial “V0”, a aceleração “a”, o espaço final “S” e o espaço inicial “S0”. V := raizq ( Vo^2 + 2*a*(S-So)) Algoritmo Veloc Variaveis V, Vo, a, DS, S, So : Real Inicio Leia (Vo, a,S, So ) DS=S-So V=raizq(Vo**2 + 2*a*DS) Escreva (V) Fim Torricelli.alg Torricelli3.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 30 31 Exercícios Algoritmo "Estoque medio" Var Est_Med, Qde_Min, Qde_Max : Real Inicio Escreval("entre com o valor da quantidade mímnima e máxima") Leia (Qde_Min, Qde_Max) Est_Med := (Qde_Min + Qde_Max)/2 Escreva ("O estoque médio é:",Est_Med) Fimalgoritmo Estoque medio.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 31 32 Exercícios Escrever um algoritmo que leia dois pontos quaisquer no plano, p1(x1,y1) e p2(x2,y2) e calcule a distância entre eles. Algoritmo distancia_dois_pontosVariáveis x2,x1,y2,y1,d : Real Inicio Leia (x1, y1) Leia (x2, y2) d = raizq((x2-x1)**2+(y2-y1)**2) Escreva (d) Fim Distancia2pontos.alg D := RaizQ( (x2 - x1)^2 + (y2 - y1)^2 ) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 32 Página 60 Algoritmos - Lógica para Desenvolvimento de Programação de Computadores https://integrada.minhabiblioteca.com.br/reader/books/9788536531472/pageid/61 33 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 34 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 35 Páginas 64/65/66 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 36 Estruturas básicas para construção de algoritmos Identifique quais os tipos dos dados abaixo. Utilize (I)nteiro, (R)eal, (C)aractere e (L)ógico. ( ) 1000 ( ) “-900” ( ) VERDADEIRO ( ) -1,56 ( ) 34 ( ) 10,0 ( ) FALSO ( ) “José Francisco” ( ) “Verdadeiro” ( ) “27,23” Relembrando I C L R I R L C C C O comando de atribuição permite fornecer um valor a uma certa variável. Os comandos de atribuição são: = (Exemplo: X=3) := (Exemplo: X:=3) ← (Exemplo: X ← 3) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 36 37 Estruturas básicas para construção de algoritmos Variáveis são endereços de memória que guardam, temporariamente, um valor utilizado pelo programa. Toda variável deve ter atributos do tipo nome, tipo, tamanho (que vem do tipo escolhido) e valor. Um nome de variável deve necessariamente começar com uma letra; Um nome de variável não deve conter nenhum símbolo especial, exceto a sublinha ( _ ) e nenhum espaço em branco; Um nome de variável não poderá ser uma palavra reservada a uma instrução de programa. Exemplos de nomes de variáveis: Variáveis Salário – correto 1ANO – errado (não começou uma letra) ANO1 – correto a casa – errado (contém o caractere branco) SAL/HORA – errado (contém o caractere “/”) SAL_HORA – correto _DESCONTO – correto (começou com o caractere sublinha) -DESCONTO – errado (começou com um caractere especial) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 37 38 Estruturas básicas para construção de algoritmos São palavras que possuem significado especial na construção do algoritmo ou programa. Tais palavras não podem ser utilizadas como identificadores em um algoritmo. Veja algumas palavras reservadas: Palavras reservadas CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 38 39 Teste de Mesa Após desenvolver um algoritmo ele deverá sempre ser testado. Este teste é chamado de TESTE DE MESA, que significa, seguir as instruções do algoritmo de maneira precisa para verificar se o procedimento utilizado está correto ou não. Veja o exemplo: distância 1 distância 2 distância 3 Utilize a tabela ao lado: Distância (Km) Tempo (h) S1 30 1 S2 60 2 S3 75 2,5 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 39 40 Teste de Mesa Após desenvolver um algoritmo ele deverá sempre ser testado. Este teste é chamado de TESTE DE MESA, que significa, seguir as instruções do algoritmo de maneira precisa para verificar se o procedimento utilizado está correto ou não. Veja o exemplo: x y soma c 1 2 0 2 1+5 = 6 2 0+6+2=8 3 6+5 = 11 2 8+11+2=21 4 11 2-2 = 0 21+11+0=32 5 11 0-2 = -2 32+11-2=41 6 c=2, x=1, y=2, soma=0 Enquanto (c< =5) faça Se (c<=3) Então x = x + 5 Senão y = y - 2 Fim-Se Soma = soma + x + y c = c + 1 Fim-enquanto CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 40 41 Estruturas básicas para construção de algoritmos Nas “Operações Lógicas”, verificamos que na maioria das vezes necessitamos tomar decisões no andamento do algoritmo. Essas decisões interferem diretamente no andamento do programa. Trabalharemos com três tipos de estrutura: A estrutura Seqüencial ou Seqüenciação ; A estrutura de Decisão ou Seleção e, A estrutura de Repetição ou Iteração . Estruturas básicas para construção de algoritmos CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 41 42 É representada pela conexão de dois ou mais símbolos de processamento, ligados por um símbolo indicativo do sentido do fluxo de execução. Os comandos são executados numa seqüência pré-estabelecida. Cada comando somente é executado após o término do comando anterior. Todo algoritmo é uma seqüência. A seqüenciação é aplicada quando a solução do problema pode ser decomposta em passos individuais. Estrutura Sequencial Comando 2 Comando 1 Slide 60 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 42 43 Estruturas de Decisão ou Seleção Capítulo 4 do livro CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 43 44 Os comandos de decisão ou desvio fazem parte das técnicas de programação que conduzem a estruturas de programas que não são totalmente seqüenciais. Com as instruções de SALTO ou DESVIO pode-se fazer com que o programa proceda de uma ou outra maneira, de acordo com as decisões lógicas tomadas em função dos dados ou resultados anteriores. As principais estruturas de decisão são: Estruturas de decisão do tipo “Se”: “Se então” “Se então Senão”, e Estruturas de decisão do tipo “Escolha” “Caso Selecione” Estruturas de Decisão ou Seleção CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 44 45 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 46 Estruturas de Decisão Se Então” Fazer um algoritmo utilizando a Pseudolinguagem para realizar a conversão da velocidade de Km/h para m/s e a conversão de m/s para Km/h. Entradas: Saída: Processamento: Entradas: Opção e velocidade; Saída: Velocidade; Processamento: V=V/3,6 ou V=V*3,6. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 46 47 Estruturas de Decisão Se Então” Fazer um algoritmo utilizando a Pseudolinguagem para realizar a conversão da velocidade de Km/h para m/s e a conversão de m/s para Km/h. Entradas: Opção e velocidade; Saída: Velocidade; Processamento: V=V/3,6 ou V=V*3,6. Algoritmo "Conv_Veloc" Var V: real opcao:inteiro Inicio Escreval("Escolha (1) Km/h para m/s (2) m/s para km/h") Leia (opcao) Escreval ("Entre com o valor da velocidade") Leia (V) Se (opcao=1) Entao V:=V/3,6 Escreval("A velocidade em m/s é", V) Senao V:=V*3,6 Escreval("A velocidade em km/h é", V) Fimse fimalgoritmo Conver_veloc.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 47 48 Comandos de Decisão (Desvio condicional encadeado ou aninhado) Existem casos em que é necessário se estabelecerem verificações de condições sucessivas. Quando uma ação é executada, ela poderá ainda estabelecer novas condições, isso significa condições dentro de condições. Esse tipo de estrutura poderá ter diversos níveis de condição, sendo chamados de aninhamentos ou encadeamentos. O segundo encadeamento pode ser tanto para uma condição verdadeira quanto uma condição falsa. comandos ... se (<condição1>) então <comandos para condição1 verdadeira> senão se (<condição2>) então <comandos para condição2 verdadeira, porém condição1 Falsa> senão <condição1 e condição2 falsas> fim_se fim_se ... comandos CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 48 49 Comandos de Decisão “Se então Senão” Exercício Escreva um algoritmo que apresenta as seguintes condições: Se a média for menor que 5.0 o aluno é reprovado. b) Se a média for maior ou igual a 5.0 e menor que 7.0, o aluno deverá fazer outra prova. c) Se a média for maior ou igual a 7.0, o aluno está aprovado. Media< 5.0 5.0<=Media<7.0 Media>=7.0 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 49 50 Comandos de Decisão “Se então Senão” Algoritmo Aprovação Var Media: real Início Leia Media Se Media >=5,0 Se Media >=7,0 Então Escreva “ Aluno aprovado” Senão Escreva “Outra avaliação” Senão Escreva “Aluno Reprovado” Fim_se Fim Media 5 7 condicional.alg Media 4 notas.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 50 51 Estruturas básicas para construção de algoritmos Escreva um algoritmo utilizando pseudolinguagem e fluxograma para determinar o maior entre dois números reais dados. Exercícios Algoritmo Var Início Fim. Algoritmo <nome_do_algoritmo> <declaração_de_variáveis> Início <corpo_do_algoritmo> Fim. Algoritmo Maior Var A, B: real Início Escreva “Algoritmo para comparar dois números” Escreva “Digite o primeiro número” Leia A Escreva “Digite o segundo número” Leia B Se A>B então Escreva A senão Escreva B Fim_se Fim. Entradas: A e B Processamento: A>B Saída: Maior (A e B) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 51 52 Pseudocódigo Algoritmo Maior Var A, B: real Início Escreva “Algoritmo para comparar dois números” Escreva “Digite o primeiro número” Leia A Escreva “Digite o segundo número” Leia B Escreva “O maior é:” Se A>B então Escreva A senão Escreva B Fim_se Fim. if (A>B) { printf( “%d”, A) } else { printf(“%d”, B ) } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 52 Desenvolver um programa de computador que calcule o reajuste de salário de um colaborador de uma empresa. Considere que o colaborador deve receber um reajuste de 15% caso seu salário seja menor que 500. Se o salário for maior ou igual a 500, mas menor ou igual a 1000, seu reajuste será de 10%; caso seja ainda maior que 1000, o reajuste deve ser de 5%. Salário < 500, reajuste será de 15% (multiplicar salário por 1,15). Salário >= 500, mas <= 1000, reajuste será de 10% (multiplicar salário por 1,10). Salário > 1000, reajuste será de 5% (multiplicar salário por 1,05). 53 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Entendimento 1. Ler o valor de salário atual (variável SA). 2. Verificar se o valor da variável SA é menor que 500. Se sim, reajustar o valor com mais 15%, atribuindo o novo valor à variável NS. Se não, verificar a próxima condição. Note que essa con-dição estabelece o reajuste de 15% aos salários entre os valores de 0 até 499. O que estiver acima dessa faixa é verificado posteriormente. 3. Verificar se o valor da variável SA é menor ou igual a 1000. Se sim, reajustar o valor com mais 10%, atribuindo o novo valor à variável NS. Essa condição estabelece o reajuste de 10% aos salários entre 500 (após a condição falsa do passo 3) até 1000. O que estiver fora dessa faixa é automaticamente reajustado com mais 5% atribuído à variável NS, pois se trata de valores acima de 1000. 4. Apresentar o valor do novo salário, implicado na variável NS. A referência feita no passo 4 já deixa determinado o reajuste de 5% para os salários maiores que 1000, não sendo necessário explicitar essa condição, pois as condições do problema já foram defini-das no passo 3 e no próprio passo 4. 54 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 55 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Página 91 Elaborar um programa de computador que leia três valores numéricos inteiros, sendo dois representados pelas variáveis A e B e que serão utilizados para a elaboração de um de dois cálculos programados: A + B e A – B. O terceiro, representado pela variável X, será um valor chave de seleção da operação a ser efetuada. Se o valor da variável X não for maior que 5, será realizada a operação C ← A + B; caso contrário, deve ser realizada a operação C ← A – B. Ao final o programa deve apresentar o resultado armazenado na variável C. Observe a seguir a descrição das etapas básicas de entendimento do problema e a representação das ações a serem efetuadas pelo programa na Figura do próximo slide. 56 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 57 Entendimento Efetuar a entrada, respectivamente, dos valores das variáveis A, B e X. Verificar se o valor fornecido para a variável X realmente não é maior que 5. Sendo esta condi-ção verdadeira, processar a operação C ← A + B; caso contrário, deve ser realizada a operação C ← A – B. 3. Apresentar o resultado obtido na variável C. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 58 Nessa estrutura pode haver uma ou mais condições a serem testadas e um comando diferente associado a cada uma dessas condições. Exemplo: escreva um algoritmo que tem como entrada salário e profissão de funcionários de uma empresa. O processamento desse algoritmo deverá apresentar o salário reajustado dos profissionais obedecendo os critérios abaixo: Salário de técnico e auxiliar deve ser reajustado em 50%; Salário de gerente deve ser reajustado em 30%; Demais salários devem ser reajustado em 10%. Estruturas de Decisão do tipo Escolha “Caso Selecione” Entradas: Salário e Profissão Processamento: Sal_Reaj=Sal*1.5 Sal_Reaj=Sal*1.3 Sal_Reaj=Sal*1.1 Saída: Sal_Reaj CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 58 59 Estruturas de Decisão do tipo Escolha “Caso Selecione” Algoritmo "Salarios" Var Salario,Sal_Reaj: real Profissao : caractere Inicio Escreval("Entre com a profissão: Auxiliar, Tecnico, Gerente, Outro") Leia (Profissao) Escreval("Entre com o salário") Leia (Salario) Escolha Profissao Caso "Tecnico","Auxiliar" Sal_Reaj:=1.5*Salario Caso "Gerente" Sal_Reaj:=1.3*Salario outrocaso Sal_Reaj:=1.1*Salario Fimescolha Escreval ("Salario Reajustado = ", Sal_Reaj) Fimalgoritmo Intc\aula7\Salario escolha caso profissao.alg Algoritmo "Salarios" Var Salario,Sal_Reaj: real Prof : caractere Inicio Escreval("Entre com a profissão: (1) Auxiliar ") Escreval("(2)Tecnico (3) Gerente, (4) Outro") Leia (Prof) Escreval("Entre com o salário") Leia (Salario) Escolha Prof Caso "1","2" Sal_Reaj:=2.5*Salario Caso "3" Sal_Reaj<-1.3*Salario outrocaso Sal_Reaj<-1.1*Salario Fimescolha Escreval ("Salario Reajustado = ", Sal_Reaj) Fimalgoritmo Switch (Prof) { case “1” : case “2” : Sal_Reaj = 2.5*Salario; break; case “3” : Sal_Reaj = 1.3*Salario; break; default : Sal_Reaj = 1.1*Salario; } printf ("Salario Reajustado = %f", Sal_Reaj); CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 59 Exercício Modifique o algoritmo abaixo, trocando a estrutura se...então...senão pela estrutura escolha ... caso 60 Algoritmo "calculadora" Var x, a,b: real operacao : caractere Inicio Escreval("Entre com a opção:") Escreval("(+)Soma (-) Subtração") Leia (operacao) Escreval("Entre com o primeiro número") Leia (a) Escreval("Entre com o segundo número") Leia (b) Se operacao="+" entao x:=a+b Senao Se operacao="-" entao x:=a-b Senao Escreval ("Opção inexistente") Fimse Fimse escreval("O valor de a",operacao,"b = ",x) Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 61 Estruturas de Decisão do tipo Escolha “Caso Selecione” Algoritmo "Calculadora" Var x, a,b: real operacao : caractere Inicio Escreval("Entre com a opção:) Escreval("(^)Potenciação (*) Multiplicação ")Escreval(“(/) Divisão (+)Soma (-) Subtração") Leia (operacao) Escreval("Entre com o primeiro número") Leia (a) Escreval("Entre com o segundo número") Leia (b) Intc\aula7\ Calculadora.alg Escolha operacao Caso "^" x:=a^b Caso "*" x:=a*b Caso "/" x:=a/b Caso "+" x:=a+b Caso "-" x:=a-b outrocaso Escreval ("Opção inexistente") Fimescolha Escreval("O valor de a",operacao,"b é:",x) Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 61 Estruturas de Decisão do tipo Escolha “Caso Selecione” Algoritmo Salarios Var Salario, Sal_Reaj: real; Prof : literal [20] Início Leia Salario, Prof Escolha Prof Caso “Tecnico” Sal_Reaj←1.5*Salario Caso “Gerente” Sal_Reaj←1.3*Salario Outrocaso Sal_Reaj←1.1*Salario Fim_escolha Escreva “Salario Reajustado =”, Sal_Reaj Fim CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 62 63 São também chamadas de Laços ou Loops Quando uma seqüência de comandos deve ser executada repetidas vezes, tem-se uma estrutura de repetição. A estrutura de repetição, assim como a de decisão, envolve sempre a avaliação de uma condição. A classificação das estruturas de repetição é feita de acordo com o conhecimento prévio do número de vezes que o conjunto de comandos será executado. Estruturas de Repetição CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 63 64 É uma variável de controle, inteira, que serve para controlar quantas vezes um determinado trecho de programa foi executado. Contador I PAR Saída 1 0 0 2 2 2 3 4 4 ... ... ... Algoritmo "PROGRAMA PARES" Var i,PAR, X: INTEIRO Inicio PAR:=0; x:=0 i:=1 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 Fimalgoritmo numeros pares sequencial.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 64 65 É uma variável de controle que serve para acumular valores. Considere que um programa, além de ler 100 valores e mostrar a quantidade de números positivos, deva mostrar a soma dos valores positivos digitados. Acumulador ALGORITMO “SOMA_SALARIOS”; VAR SOMA, SALARIO : REAL; INICIO SOMA:=O; SALARIO:=0; ENQUANTO SALARIO>=0 INICIO LEIA (SALARIO); SOMA:=SOMA+SALARIO FIMENQUANTO; ESCREVAL (SOMA) FIM. Salario Soma Saída 0 0 --- 50 50 50 200 250 250 300 550 550 ... ... ... Aula7\Enquanto salario.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 65 66 A estrutura de repetição é representada utilizando as estruturas: Laço Contado: Quando se conhece quantas vezes o comando será executado. Também conhecido como ESTRUTURA DE REPETIÇÃO DETERMINADA. Laços Condicionais: Quando não se conhece quantas vezes o comando será repetido pelo fato do comando está amarrado a uma condição sujeita à modificação pelas instruções do interior do laço. Também conhecido como ESTRUTURA DE REPETIÇÃO INDETERMINADA . Estruturas de Repetição CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 66 67 Na repetição determinada o algoritmo apresenta previamente a quantidade de repetições. Estruturas de Repetição Determinada Algoritmo "PROGRAMA PARES" Var i, Par: INTEIRO Inicio Par:=0; para i:=1 ate 100 faca ESCREVAL (Par) Par := Par+2 Fimpara Fimalgoritmo Var i,PAR, X: INTEIRO Inicio PAR:=0; x:=0 i:=1 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 67 68 Na repetição determinada o algoritmo apresenta previamente a quantidade de repetições. Estruturas de Repetição Determinada PROGRAMA REPETIÇÃO VAR I: INTEIRO; PARA <<VARIAVEL DE TIPO INTEIRO>>:=<<VALOR INICIAL>> ATE <<VALOR FINAL>> FAÇA ÍNICIO <<COMANDO1>>; <<COMANDON>> FIM; Expressão Geral ALGORITMO “REPETICAO” VAR I:INTEIRO INICIO PARA I:=1 ATE 10 FACA ESCREVA (“O mengão será Campeão!”) FIMPARA FIM Algoritmo "PROGRAMA PARES" Var i, Par: INTEIRO Inicio Par:=0; para i:=1 ate 100 faca ESCREVAL (Par) Par := Par+2 Fimpara Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 68 69 Veja o funcionamento do algoritmo: Contador “i” e a variável Acumuladora “Par” na estrutura de repetição determinada Algoritmo "PROGRAMA PARES" Var i, PAR: INTEIRO Inicio PAR:=0; x:=0 para i:=1 ate 10 faca ESCREVAL(i,"o. par =",PAR) PAR := PAR+2 Fimpara Fimalgoritmo I PAR Saída 1 0 0 2 2 2 3 4 4 ... ... ... LTP\Cem pares.alg LTP\NumerosPares.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 69 70 Exemplo: Um determinado restaurante faz o registro da quantidade de refrigerantes vendidas no último ano. Considerando que cada refrigerante foi vendido a R$ 1,50, deseja-se saber o total arrecadado no último ano. Obviamente que, para este problema, tem-se como entrada a quantidade de refrigerantes vendidos, e como solução do problema (saída), o total arrecadado. Veja, a seguir, o respectivo algoritmo (algoritmo Restaurante_1). Estruturas de Repetição Determinada Algoritmo Restaurante_1 Variáveis Qtidade_Vendida : Inteiro Valor_Arrecadado : Real Início Leia Qtidade_Vendida Valor_Arrecadado Qtidade_Vendida * 1.50 Escreva Valor Arrecadado Fim CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 70 71 Exemplo: Se desejarmos determinar o total arrecadado, em cada um dos últimos três anos, o algoritmo poderia ser escrito conforme a seguir: Estruturas de Repetição Determinada Algoritmo Restaurante_2 Variáveis Qtidade_Vendida : Inteiro Valor_Arrecadado : Real Início // Determinação do total arrecadado no último ano Leia Qtidade_Vendida Valor_Arrecadado Qtidade_Vendida * 1.50 Escreva Valor Arrecadado // Determinação do total arrecadado no penúltimo ano Leia Qtidade_Vendida Valor_Arrecadado Qtidade_Vendida * 1.50 Escreva Valor Arrecadado // Determinação do total arrecadado no antepenúltimo ano Leia Qtidade_Vendida Valor_Arrecadado Qtidade_Vendida * 1.50 Escreva Valor Arrecadado Fim quantidade vendida1.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 71 72 O processo de repetição de um grupo de comandos é controlado por algum tipo de contador. Uma variável, que funciona como um contador, vai assumindo os valores 1, 2, 3 e assim por diante, até que atinja determinado valor, quando então, a repetição deve ser encerrada. Assim, considerando esses casos, podemos definir um comando de repetição mais simples, que faça com que uma determinada variável vá assumindo automaticamente valores seqüenciais, e que quando atingir determinado valor, o processo de repetição seja encerrado. Estruturas de Repetição Determinada CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 72 73 Estruturas de Repetição Determinada Algoritmo Restaurante_2 Variáveis Qtidade_Vendida, Ano : Inteiro Valor_Arrecadado, Soma : Real Início Soma:=0 Para Ano de 1 até 3 Faça Leia Qtidade_Vendida Valor_Arrecadado Qtidade_Vendida * 1.50 Escreva Valor Arrecadado Soma:=Soma + Valor_Arrecadado Escreva Soma Fim Para Fim quantidade vendida2.alg ano QVend VA Soma 0 1 100 150 150 2 200 300 450 3 300 450 900CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 73 74 Exercício: Fazer um algoritmo para escrever os 50 primeiros números pares. Estruturas de Repetição Determinada PROGRAMA REPETIÇÃO VAR I: INTEIRO; PARA <<VARIAVEL DE TIPO INTEIRO>>:=<<VALOR INICIAL>> ATE <<VALOR FINAL>> FAÇA ÍNICIO <<COMANDO1>>; <<COMANDON>> FIM; Expressão Geral Algoritmo “numeros_pares" Var i,par: inteiro Inicio par<-0 para i de 1 ate 50 faca escreval (par) par<- par+2 fimpara fimalgoritmo Par1.alg Entrada: 0-50 Processamento: par+2 Saída: números pares PAR I Saída Escrever 0 1 0 2 2 2 4 3 4 ... ... ... par = 0; for (i=0; i<=50; i++) { printf (“\n %d”, par); par = par+2; } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 74 75 Estrutura de repetição indeterminada com validação inicial Estrutura de repetição indeterminada com validação final Estruturas de Repetição Indeterminada CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 75 76 Estrutura de repetição indeterminada com validação inicial É usada para repetir N vezes uma ou mais instruções. Tendo como vantagem o fato de não ser necessário o conhecimento prévio do número de repetições. Estruturas de Repetição Indeterminada PROGRAMA REPETIÇÃO VAR I: INTEIRO; ENQUANTO <<CONDIÇÃO>> FACA ÍNICIO <<COMANDO1>>; <<COMANDON>> FIM; Expressão Geral CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 76 77 Exemplo Faça um algoritmo que calcule a soma dos salários dos funcionários de uma empresa. O programa termina quando o usuário digitar um salário menor que 0. Estruturas de Repetição Indeterminada com Validação Inicial Exemplo Faça um algoritmo que calcule a soma dos salários dos funcionários de uma empresa. O programa termina quando o usuário digitar um salário menor que 0. Entrada: salário Processamento: somar salários Saída: escrever soma dos salários Término (condição): salário < 0 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 77 78 Estruturas de Repetição Indeterminada com Validação Inicial ALGORITMO SOMA_SALARIOS; VAR SOMA, SALARIO : REAL; INICIO SALARIO:=0; SOMA:=O; ENQUANTO SALARIO>=0 INICIO LEIA (SALARIO); SOMA:=SOMA+SALARIO FIMENQUANTO; ESCREVAL (SOMA) FIM. Entrada Proces. Saída Salario Soma Escrever (Soma) 0 0 --- 50 50 50 200 250 250 300 550 550 ... ... ... Exemplo Faça um algoritmo que calcule a soma dos salários dos funcionários de uma empresa. O programa termina quando o usuário digitar um salário menor que 0. intcomp\ salario enquanto1.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 78 79 Estrutura de repetição indeterminada com validação final Sua validação é final fazendo com que a repetição seja executada pelo menos uma vez. Estruturas de Repetição Indeterminada PROGRAMA REPETIÇÃO VAR I: INTEIRO; REPITA <<COMANDO1>>; <<COMANDON>> ATE <<CONDIÇÃO>> Expressão Geral CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 79 80 Exemplo Faça um algoritmo que calcule a soma dos salários dos funcionários de uma empresa. O programa termina quando o usuário digitar um salário menor que 0. Estruturas de Repetição Indeterminada com Validação Final ALGORITMO “SOMA_SALARIOS” VAR SOMA, SALARIO : REAL INICIO SOMA:=O; REPITA LEIA (SALARIO); SOMA:=SOMA+SALARIO ATE SALARIO<0; ESCREVAL (SOMA) FIM. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 80 Exercício Faça alterações no algoritmo abaixo para que ele utilize uma estrutura de repetição indeterminada para fornecer uma opção ao usuário de poder continuar a fazer novas operações de soma. 81 Algoritmo "Soma" Var S,A,B: real Inicio Escreval("Algoritmo soma de dois números") Escreval("Entre com os dois números") LEIA (A,B) S := A + B Escreva ("A soma dos números é:",S) Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exercício sem olhar os algoritmos já desenvolvidos Faça alterações no algoritmo abaixo para que ele utilize uma estrutura de repetição determinada para realizar a soma e a raiz quadrada dos 100 primeiros números pares. 82 Var i,PAR, X: INTEIRO Inicio PAR:=0; x:=0 i:=1 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS um número inteiro é par se for o dobro de um número inteiro. 0 é o dobro de 0, 82 Exercício sem olhar os algoritmos já desenvolvidos Faça alterações no algoritmo abaixo (utilize o exercício do slide anterior) para que ele utilize uma estrutura de repetição determinada para realizar a soma e a raiz quadrada dos 100 primeiros números pares. A raiz quadrada de um número é calculada pela instrução x := Raizq(N), sendo N o número que se deseja extrair a raiz quadrada. 83 Var i,PAR, X: INTEIRO Inicio PAR:=0; x:=0 i:=1 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 ESCREVAL(i,"o. par =",PAR) i:=i+1 PAR := PAR+2 Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS um número inteiro é par se for o dobro de um número inteiro. 0 é o dobro de 0, 83 Página 114 Elaborar um programa que efetue a entrada de um valor numérico inteiro qualquer. Em seguida, processar o cálculo do valor de entrada, multiplicando-o por 3 e apresentando seu resultado. Proceder à execução dos passos anteriores cinco vezes. 84 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Entendimento No problema exposto nada impede que se faça a entrada do valor, execute o processamento da multiplicação e em seguida apresente o resultado cinco vezes, escrevendo cinco entradas, com cinco processamentos e cinco saídas. O problema seria mais difícil de resolver se tivesse de executar a mesma tarefa mil vezes. Para solucionar este problema existem as estruturas de laços. Atente para os passos descritos a seguir: 85 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Estrutura de repetição determinada 86 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exercício Utilize o exemplo do algoritmo em visualg para calcular as raízes quadradas dos 100 primeiros números pares. 87 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exemplo com laço iterativo Elaborar um programa que efetue a entrada de um valor numérico inteiro qualquer. Em seguida, calcular o valor entrado, multiplicando-o por 3 e apresentando seu resultado. Ao final da apresentação do resultado, o programa deve perguntar ao usuário se ele deseja novo cálculo. Se a resposta for sim, deve executar novamente as instruções subordinadas ao bloco adjacente. Se a resposta for não, o programa deve parar a execução. 88 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exemplo com laço iterativo Entendimento No problema exposto, é necessário definir um laço que vai executar a vontade do usuário. Assim, não há possibilidade de saber quantas vezes o laço será executado. O número de vezes vai depender da vontade do usuário, por isso esse tipo de laço chama-se interativo. Atente para os passos descritos a seguir: 1. Criar uma variável de controle para ser utilizada como resposta (variável RESP). 2. Enquanto o valor da variável RESP for igual a “S”, executar os passos 3 a 5; caso contrário, desviar a execução do programa para o passo 8. 3. Ler um valor inteiro qualquer (variável N). 4. Efetuar a multiplicação do valor de N por 3, colocando o resultado na variável R. 5. Apresentar o valor calculado que está armazenado na variável R. 6. Perguntar para o usuáriose ele deseja continuar a execução do programa. 7. Retornar a execução do programa ao passo 2. 8. Encerrar o programa. 89 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Codificação com validação inicial 90 Estrutura Indeterminada VI.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS página 123/124 Elaborar um programa que efetue a entrada de um valor numérico inteiro qualquer. Em seguida, calcular o valor de entrada, multiplicando-o por 3 e apresentando seu resultado. Ao final, o programa deve perguntar ao usuário se ele deseja novo cálculo. Se a resposta for sim, deve executar novamente as instruções subordinadas ao bloco adjacente. Se a resposta for não, o programa deve parar a execução. Observe a seguir a descrição das etapas básicas de entendimento do problema e a representação das ações do programa na Figura do próximo slide. 91 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Entendimento página 124 Por ser um problema semelhante a uma situação já exposta, basta escolher um laço que vai satisfazer a vontade do usuário do programa. Assim, não é possível saber quantas vezes o laço será executado. Atente para os passos descritos a seguir: 1. Criar uma variável de controle para ser utilizada como resposta (variável RESP). 2. Ler um valor inteiro qualquer (variável N). 3. Efetuar a multiplicação do valor de N por 3, colocando o resultado na variável R. 4. Apresentar o valor calculado que está armazenado na variável R. 5. Perguntar para o usuário se ele deseja continuar o programa. 6. Caso o valor da variável RESP seja diferente de “S”, executar os passos 2 a 4; caso contrário, ir para o passo 7. 7. Encerrar o programa. 92 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Codificação com validação final 93 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Utilize o VisualG para responder ao exercício do próximo slide 94 Dado o seguinte algoritmo: Algoritmo “Programa p1” var i,j,k:inteiro inicio leia(i) leia(j) leia(k) se (i>j) e (i>k) então escreva(i) senão se j>k ntão escreva(j) senao escreva(k) fimse fimse fim. A) Entrada respectivamente 3 e 1 e 2 Saída: 3 2 1 B)Entrada respectivamente 1 e 3 e 2 Saída: 2 C) Entrada respectivamente 1 e 2 e 3 Saída: 6 D) Entrada respectivamente 3 e 2 e 1 Saída: 1 E) Entrada respectivamente 1 e 3 e 2 Saída: 3 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Utilize o VisualG para responder ao exercício do próximo slide 95 Se as entradas para as variáveis i, j e k forem respectivamente 3, 1 e 2, qual será a saída? Se as entradas para as variáveis i, j e k forem respectivamente 1, 3 e 2, qual será a saída? Se as entradas para as variáveis i, j e k forem respectivamente 1, 2 e 3, qual será a saída? Se as entradas para as variáveis i, j e k forem respectivamente 3, 2 e 1, qual será a saída? Esse é o 2º. exercício pertence ao Módulo dos Estudos Disciplinares CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Resposta: o algoritmo verifica qual é o maior entre os três números digitados para as variáveis i, j e k. Portanto, a resposta correta é a letra “E” 96 A) Entrada respectivamente 3 e 1 e 2 Saída: 3 2 1 B)Entrada respectivamente 1 e 3 e 2 Saída: 2 C) Entrada respectivamente 1 e 2 e 3 Saída: 6 D) Entrada respectivamente 3 e 2 e 1 Saída: 1 E) Entrada respectivamente 1 e 3 e 2 Saída: 3 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Utilize o VisualG para responder ao exercício do próximo slide 97 O que o algoritmo abaixo faz ? início | NOME : literal | CPF, RENDAANUAL, NUMDEPENDENTES, RENDALIQUIDA, ALIQUOTAFREQMIN, | VALORAPAGAR : numérico | leia "Digite o nome do contribuinte (ou FIM para finalizar o cadastro):", NOME | enquanto NOME <> "FIM" faça | | leia "Digite o CPF:", CPF | | leia "Digite a renda anual:", RENDAANUAL | | leia "Digite o número de dependentes:", NUMDEPENDENTES | | RENDALIQUIDA <- RENDAANUAL - (NUMDEPENDENTES * 110) | | se RENDALIQUIDA < 901 | | | então ALIQUOTA <- 0 | | | senão se RENDALIQUIDA >= 901 e RENDALIQUIDA < 5001 | | | | então ALIQUOTA <- 5 | | | | senão se RENDALIQUIDA >= 5001 e RENDALIQUIDA < 10001 | | | | | então ALIQUOTA <- 10 | | | | | senão ALIQUOTA <- 15 | | | | fim-se | | | fim-se | | fim-se | | VALORAPAGAR <- RENDAANUAL * (ALIQUOTA/100) | | fim-enquanto fim CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 98 A)Calcula o valor do Imposto de renda a pagar de acordo com a faixa da alíquota respectiva a renda líquida ; B)Calcula o valor da renda líquida de acordo com o acréscimos dos dependentes; C)Calcula o valor da renda líquida menos os impostos; D)Calcula o valor da alíquota a pagar; E)Calcula o salário final do usuário; Esse é o 14º. exercício pertence ao Módulo dos Estudos Disciplinares Resposta: a estrutura “se...então...senão” apresenta cálculos de alíquotas observando os intervalos 0 - 900; 901 – 5000; 50001 – 10000, e maior que 10001. Também é observado o desconto para os dependentes. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 99 Linguagem de Programação C Histórico Unidade 2 - Noções básicas preliminares 2.1 - Estrutura/execução de um programa 2.2 - Tipos de dados 2.3 - Variáveis simples 2.4 - Declaração de variáveis 2.5 - Expressões aritméticas e lógicas; precedência de operadores 2.6 - Comando de atribuição 2.7 - Comandos de entrada e saída 2.8 - Bloco de instruções 2.9 - Arquivos de cabeçalho CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 99 100 Linguagem de Programação C O C é "Case Sensitive", isto é, maiúsculas e minúsculas fazem diferença. Se declarar uma variável com o nome soma ela será diferente de Soma, SOMA, SoMa ou sOmA. Da mesma maneira, os comandos do C if e for, por exemplo, só podem ser escritos em minúsculas pois senão o compilador não irá interpretá-los como sendo comandos, mas sim como variáveis. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 100 Susceptível a argumentos 101 Linguagem de Programação C O “C” e o “C++” CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 101 102 Linguagem de Programação C Palavras Chaves auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if static while CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 102 103 2.1 - Estrutura/execução de um programa O que é linguagem estruturada? CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 103 104 2.1 - Estrutura/execução de um programa O que é linguagem estruturada? #include <stdio.h> #include <conio.h> #include "Matematica.h" int main() { float num_1, num_2, operacao; char op; printf("\n Entre com a operacao desejada: (+), (-) ou para finalizar (.): \n"); scanf("%s",&op); while (op != '.'){ printf("Entre com o 1o. Numero:\n "); scanf("%f",&num_1); printf("Entre com o 2o. Numero: \n"); scanf("%f",&num_2); switch(op){ case '+' : operacao = soma(num_1,num_2); printf("\nA soma destes numeros e' %.2f", operacao); break; case '-' :operacao = subtracao(num_1,num_2); printf("\nA subtracao destes numeros e' %.2f", operacao); break; default : printf("Operador desconhecido\n"); } printf("\n Entre com a operacao desejada: (+), (-) ou para finalizar (.): \n"); scanf("%s",&op); } } //“arquivo Matematica.h" float soma(float a, float b){ float soma1; soma1 = a + b; return(soma1); } float subtracao(floata, float b){ float sub; sub = a - b; return(sub); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 104 2.1 - Estrutura/execução de um programa A geração do programa executável a partir do programa fonte obedece a uma seqüência de operações antes de tornar-se um executável. Depois de escrever o módulo fonte em um editor de textos, o programador aciona o compilador. Essa ação desencadeia uma seqüência de etapas, cada qual traduzindo a codificação do usuário para uma forma de linguagem de nível inferior, que termina com o executável criado pelo lincador. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.1 - Estrutura/execução de um programa Editor (módulo fonte em C) Pré-processador (novo fonte expandido) Compilador (arquivo objeto) Lincador (executável) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 107 Linguagem de Programação C Linkeditor CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 107 108 2.1 - Estrutura/execução de um programa Linkeditor CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 108 2.1 - Estrutura/execução de um programa As funções têm a seguinte estrutura: tipo nome_da_funcao(parâmetros) { variáveis locais instruções em C } #include <stdio.h> main(void) { int i=1; printf("Eu gosto de programar em C\n"); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.1 - Estrutura/execução de um programa Assim o programa: Contém apenas uma função (a função main(), que é obrigatória) e que não tem parâmetros (void). Como instrução da função temos apenas a chamada a printf(), que escreve no vídeo a frase Eu gosto de programar em C A instrução printf é uma função da biblioteca stdio.h. A frase Eu gosto de programar em C é uma cadeia de caracteres chamada de string. A combinação \n no fim da string indica uma mudança de linha (o carácter new line ou line feed). No final de cada instrução existe sempre um terminador - ; main(void) { int i=1; printf("Eu gosto de programar em C\n"); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 111 2.1 - Estrutura/execução de um programa Algoritmo "Primeiro_algoritmo" var inicio Escreval(" Ola! Esse e' meu primeiro programa!") fimalgoritmo #include <stdio.h> /* Um Primeiro Programa */ int main () { printf ("Ola! Esse e' meu primeiro programa!!\n"); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 111 112 2.1 - Estrutura/execução de um programa Primeiro Programa #include <stdio.h> /* Um Primeiro Programa */ main () { printf (" Esse e' meu primeiro programa!!\n "); return(0); } Biblioteca das entradas e saídas padronizadas Comentário Função main “{” chave que equivale a “início” Comando “printf” Retorno da função main “}” chave que equivale a “fim” ou “fimalgoritmo” CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 112 113 2.1 - Estrutura/execução de um programa Argumentos Argumentos são as entradas que a função recebe. É através dos argumentos que passamos parâmetros para a função. As funções printf() e scanf() são tipos de funções que recebem argumentos. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 113 114 2.1 - Estrutura/execução de um programa Primeiro Programa Como colocar um Comentário em um programa O comentário ajuda a elucidar o funcionamento de um programa. No programa anterior temos um comentário: /* Um Primeiro Programa */. O compilador C desconsidera qualquer coisa que esteja começando com /* e terminando com */. Um comentário pode, inclusive, ter mais de uma linha. Quando o comentário é utilizado em apenas uma linha, pode-se utilizar também o // /* Um Primeiro Programa */ ou // Um Primeiro Programa CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 114 115 2.1 - Estrutura/execução de um programa Primeiro Programa int main() A linha int main() indica que estamos definindo uma função de nome main. Todos os programas em C têm uma função main, pois é esta função que será chamada quando o programa for executado. O conteúdo da função é delimitado por chaves { }. Quando a função for chamada o código que estiver dentro das chaves será executado seqüencialmente. A palavra int indica que esta função retorna um inteiro. O que significa este retorno será visto posteriormente, quando estudarmos um pouco mais detalhadamente as funções do C. A última linha do programa, return(0); , indica o número inteiro que está sendo retornado pela função, no caso o número 0. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 115 2.2 - Tipos de dados Tipos de dados primitivos A maioria das linguagens declara os tipos inteiro, real, caractere, cadeia de caracteres e lógico. A Linguagem C não definiu como tipos originais o lógico e a cadeia de caracteres (que chamamos de string – exemplo: “UNIP”). Devemos, então, utilizar funções predefinidas para manipular esse tipo de dado, em C. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados A tabela abaixo apresenta os tipos de dados simples e os tipos de dados modificados da linguagem C . Tipo de dados Tamanho (bytes) Limite inferior Limite superior char 1 -128 127 unsigned char 1 0 255 short int 2 -32768 32767 unsigned short int 2 0 65535 int 4 -231 +231 - 1 long int 4 -231 +231 - 1 float 4 -3.2×10±38 +3.2×10±38 double 8 -1.7×10±308 +1.7×10±308 Sizeof vetor.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.3 – Variáveis simples Definição de variáveis Variáveis são locais na memória do computador que guardam conteúdos que podem ser utilizados quando determinado programa está rodando. Em linguagem C, as variáveis devem ter um nome obedecendo determinadas condições: O nome da variável deve começar com uma letra ou sublinhado (_). Esse nome não pode ser igual a uma palavra reservada, nem igual ao nome de uma função declarada pelo programador, ou pelas bibliotecas do C. Variáveis de até 32 caracteres são aceitas. O C é "case sensitive" e portanto deve-se prestar atenção às maiúsculas e minúsculas. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Tipos de dados primitivos Em Linguagem C, temos os seguintes tipos de dados primitivos: Inteiro: palavra reservada int (exemplos: 3, 6, 9, 27). Real: palavra reservada float (exemplos: 3.1416. 8.8). Caractere: palavra reservada char (exemplos: ‘a’, ‘8’) . Real de precisão dupla: palavra reservada double. Tipo sem um valor inicial: palavra reservada void. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.3 – Variáveis simples O C tem 5 tipos básicos de variáveis: char, int, float, void, double. O tipo char é utilizado para a impressão de variáveis que utilizam caracteres, O tipo int é utilizado para a impressão de variáveis que utilizam números inteiros, como contadores e controladores de laços de execução. O tipo float é utilizado para a impressão de variáveis que utilizam números reais (ponto flutuante). O tipo double é o ponto flutuante duplo e pode ser visto como um ponto flutuante com muito mais precisão (números científicos). O void é o tipo vazio, ou um "tipo sem tipo". CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Geralmente nos sistemas UNIX os tipos int e long int são equivalentes e de tamanho de inteiros de 32 bits (4 bytes). É possível que em outros sistemas o tipo int seja equivalente a um short int, ou seja, inteiro de 16 bits (2 bytes). %c – leitura /escrita de caracter %d - leitura /escrita de números inteiros %f - leitura /escrita de números reais %s - leitura /escrita de caracteres Tem-se os especificadores de formato, que formatam a entrada e a saída-padrão. São eles: %d = inteiro decimal %f = real (ponto flutuante) %o = inteiro octal %x =hexadecimal %c = caractere em formato ASCII %s = string de caracteres %p = valor ponteiro CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.4 - Declaração de variáveis Quando se faz a declaração de uma variável está se determinando que tipo de dado ela vai receber. Sintaxe: A sintaxe para a declaração de variáveis é: tipo var_1; O tipo é o tipo de dado, var_1 é o nome da variável a ser declarada. Exemplo: int i; float num; char nome_1[20]; *nome_2; CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.4 - Declaração de variáveis Inicialização de variáveis É possível, em C, declarar uma variável e já armazenar nela um valor inicial. Chamamos este procedimento de inicialização de uma variável. Sintaxe: A sintaxe para a inicialização de variáveis é: tipo var_1 = valor_1 [, var_2 = valor_2, ...] ; O tipo é o tipo de dado, var_1 é o nome da variável a ser inicializada e valor_1 é o valor inicial da variável. Exemplo: int i = 0, j = 100; float num = 13.5; char nome_1 [20] = " Programa Teste "; CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 124 2.4 - Declaração de variáveis Constantes O C possui 4 tipos básicos de constantes: Inteiras; de ponto flutuante; caracteres e, strings. Constantes inteiras e de ponto flutuante representam números de um modo geral. Caracteres e strings representam letras e agrupamentos de letras (palavras). CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 124 125 2.4 - Declaração de variáveis Constantes Simbólicas Muitas vezes identificamos uma constante numérica por um símbolo como, por exemplo, Pi = 3,14159. Podemos definir um nome simbólico para esta constante, isto é, podemos definir uma constante simbólica que represente o valor. Sintaxe: A sintaxe da instrução de definição de uma constante simbólica é: #define nome valor . Onde #define é uma diretiva de compilação que diz ao compilador para trocar as ocorrências do texto nome por valor. Observe que não há ; (ponto e vírgula) no final da instrução pois trata-se de um comando para o compilador e não para o processador. A instrução #define deve ser escrita antes da instrução de declaração da rotina principal. Esta diretiva é utilizada para a definição de macros, que são nomes que representam valores constantes. Após a definição da macro, toda ocorrência do seu nome no programa é substituída pelo valor definido. Por convenção todo o nome de macro é escrito em letras maiúsculas. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 125 126 2.4 - Declaração de variáveis Constantes pré-definidas Em alguns compiladores C, algumas constantes simbólicas já estão pré-definidas. Estas constantes em geral definem alguns valores matemáticos (, /2, e, etc.). A seguir segue uma tabela contendo algumas (existem muitas outras) constantes simbólicas pré-definidas no compilador Turbo C++ da Borland. Biblioteca Constante Valor Significado math.h M_PI 3.14159... math.h M_PI_2 1.57079... /2 math.h M_PI_4 0,78539... /4 math.h M_1_PI 0,31830... 1/ math.h M_SQRT2 1,41421... 2 #define PI 3.14159 #define EU “Renato” #define FALSE 0 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 126 127 2.4 - Declaração de variáveis Constantes #include <stdio.h> int main(){ const float Pi = 3.141592; /* declaração de constante */ float raio, area; // declaração de variáveis printf("Entre com o raio da circunferencia:"); scanf("%f",&raio); area = Pi * raio * raio/2; printf("\n Area da circunferencia = %.2f \n\n",area); } const float Pi = 3.141592; /* declaração de constante */ CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 127 128 2.7 - Comandos de entrada e saída Entrada scanf() Uma das mais importantes e poderosas instruções, servirá basicamente para promover leitura de dados (tipados) via teclado. Sua forma geral é: scanf(“string de controle”, lista de argumentos); no momento, sobre string de controle, devemos saber: %d - leitura de números inteiros %f - leitura de números reais %c - leitura de caracter %s - leitura de caracteres scanf(“%d”,&x); scanf(“%f”,&x) ; scanf(“%c”,&x) scanf(“%s”,&x) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 128 129 2.7 - Comandos de entrada e saída Entrada sintaxe: scanf ("%f",&valor); %f : variável do tipo real &valor: o dado lido deverá ser armazenado no endereço (&) alocado para a variável “valor” #include <stdio.h> int main () { float valor; printf ("Entre com o preço: "); scanf ("%f",&valor); /* Entrada de Dados*/ printf ("\O preço do produto é %f reais.\n",valor); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 129 130 2.7 - Comandos de entrada e saída Entrada sintaxe: scanf ("%d",& Qtde); %d : variável do tipo inteiro & Qtde : o dado lido deverá ser armazenado no endereço (&) alocado para a variável “Qtde” #include <stdio.h> int main () { int Qtde; printf ("Entre com a quantidade: "); scanf ("%d",& Qtde); /* Entrada de Dados*/ printf ("\A quantidade e’ %d unidades.\n", Qtde); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 130 131 2.7 - Comandos de entrada e saída Entrada sintaxe: scanf ("%c",&opcao); %c : variável do tipo caracter &opcao: o dado lido deverá ser armazenado no endereço (&) alocado para a variável “opcao” #include <stdio.h> int main () { char opcao; printf ("Entre com a Opcao: "); printf (“(A) Inserir Usuario (B) Imprimir Usuario "); scanf ("%c",&opcao); /* Entrada de Dados*/ printf ("\n A Opcao selecionada foi %c .\n", opcao); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 131 132 2.7 - Comandos de entrada e saída Entrada sintaxe: scanf ("%s",&Nome); %s : variável do tipo caracter & Nome : o dado lido deverá ser armazenado no endereço (&) alocado para a variável “opcao”. Observação: nem todo compilador funciona o scanf ("%s",&...); e deve-se utilizar o comando gets(). Exemplo : gets(nome); #include <stdio.h> int main () { char Nome[30]; printf (“Digite o seu primeiro nome: "); scanf ("%s",&Nome); /* Entrada de Dados*/ gets(Nome); printf ("\o seu primeiro nome e’: %s .\n", Nome); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 132 133 2.7 - Comandos de entrada e saída Função printf() A função printf() coloca na tela do computador o que se deseja imprimir: variáveis e/ou cadeia de caracteres. É por causa do uso da função printf() pelo programa que devemos incluir o arquivo-cabeçalho stdio.h. Veja os exemplos a seguir: printf (" O Volume do paralelepipedo e %f .",v); printf (" Foram produzidas %d peças .",x); printf (" A letra escolhida foi %c .",letra) printf (" O nome do gerente e %s .",nome); printf1 %d – escrita de no. inteiro %f - escrita de número real %c - escrita de caracter %s - escrita de (String) caracteres CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 133 2.2 - Tipos de dados Caracteres Os caracteres são um tipo de dado chamado de char. O C trata os caracteres ('a', 'b', 'x', etc ...) como sendo variáveis de 1 byte (8 bits). Na linguagem C, também podemos usar um char para armazenar valores numéricos inteiros, além de usá-lo para armazenar caracteres de texto. Para indicar um caractere de texto usamos apóstrofes. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Caracteres No programa abaixo, %c indica que printf() deve colocar um caractere na tela que é o valor de Ch (a letra D). #include <stdio.h> int main () { char Ch; Ch='D'; printf ("%c",Ch); // imprime o caracter D getch(); } caracter 1 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Caracteres Como vimos anteriormente, um char também é usado para armazenar um número inteiro.Este número é conhecido como o código ASCII correspondente ao caractere. Veja o programa abaixo: #include <stdio.h> int main () { char Ch; Ch='D'; printf ("%d",Ch); /* Imprime o caracter como inteiro */ getch(); } Este programa vai imprimir o número 68 na tela, que é o código ASCII correspondente ao caractere 'D' (d maiúsculo). caracter 2 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Strings Na linguagem C uma string é um vetor de caracteres terminado com um caractere nulo. O caracter nulo é um caractere com valor inteiro igual a zero (código ASCII igual a 0). O terminador nulo também pode ser escrito usando a convenção de barra invertida do C como sendo '\0'. O assunto vetores será discutido posteriormente, mas veremos aqui os fundamentos necessários para que possamos utilizar as strings. Para declarar uma string, podemos usar o seguinte formato geral.: char nome_da_string[tamanho]; CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Strings A expressão acima declara um vetor de caracteres (uma string) com número de posições igual a 7. Note que, como temos que reservar um caractere para ser o terminador nulo, temos que declarar o comprimento da string como sendo, no mínimo, um caractere maior que a maior string que pretendemos armazenar. Vamos supor que declaremos uma string de 7 posições e coloquemos a palavra João nela. Teremos: char nome_da_pessoa [7]; J O A O \0 ... ... String1.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Strings No caso anterior, as duas células não usadas têm valores indeterminados. Isto acontece porque o C não inicializa variáveis, cabendo ao programador esta tarefa. Portanto as únicas células que são inicializadas são as que contêm os caracteres 'J', 'o', 'a', 'o' e '\0' . Para declararmos uma variável para receber um conjunto de caracteres também podemos escrever: char* var; Exemplo: No exemplo seguinte a variável nome foi declarada como conjunto caracter e em seguida recebe uma constante string. char* nome; nome = "João Carlos de Oliveira Andrade"; string2.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Particularidade do scanf char str, str1[30], str2[30], str3[30]; scanf("%c",&str); scanf("%[^\n]", str1); scanf("%s",&str2); gets(str3); 140 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Strings Caracter com espaço.cpp #include <stdio.h> #include <conio.h> int main () { char str1[30], str2[30], str3[30]; printf("\n Entre com um nome para a string str1: "); gets(str1); printf("A string digitada para str1 foi: "); printf ("%s\n",str1); printf("\n\n Entre com um nome para a string str2: "); scanf("%[^\n]", str2); printf("A string digitada para str2 foi: "); printf ("%s",str2); printf("\n\n Entre com um nome para a string str3: "); scanf("%s",&str3); printf("A string digitada para str3 foi: %s", str3); getch(); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Inteiro Um tipo de objeto de dados determina como os valores dos dados são representados, que valores pode expressar, e que tipo de operações você pode executar com estes valores. O tipo inteiro permite a representação numérica e operações com números inteiros com até 4 bytes (dependendo do compilador). int x; x=10; inteiro.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.2 - Tipos de dados Float (ponto flutuante) O tipo float permite a representação numérica e operações com números reais com até 4 bytes. 3 = 11 2 = 10 10 = 1010 38 = 100110 float x; x=10.0; float.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 144 2.7 - Comandos de entrada e saída Entrada scanf() Uma das mais importantes e poderosas instruções, servirá basicamente para promover leitura de dados (tipados) via teclado. Sua forma geral é: scanf(“string de controle”, lista de argumentos); no momento, sobre string de controle, devemos saber: %c - leitura de caracter %d - leitura de números inteiros %f - leitura de números reais %s - leitura de caracteres CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 144 145 2.7 - Comandos de entrada e saída Entrada sintaxe: scanf ("%f",&valor); %f : variável do tipo real &valor: o dado lido deverá ser armazenado no endereço (&) alocado para a variável “valor” #include <stdio.h> int main () { float valor; printf ("Entre com o preço: "); /* Entrada de Dados*/ scanf ("%f",&valor); printf ("\O preço do produto é %f reais.\n",valor); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 145 2.7 - Comandos de entrada e saída Entrada - gets Se quisermos ler uma string fornecida pelo usuário podemos usar a função gets(). Um exemplo do uso desta função é apresentado no programa string3.cpp. A função gets() coloca o terminador nulo na string, quando você aperta a tecla "Enter". Neste programa, o tamanho máximo da string que você pode entrar é uma string de 9 caracteres. Se você entrar com uma string de comprimento maior, o programa irá aceitar, mas os resultados podem ser desastrosos. Veremos porque posteriormente. string3 #include <stdio.h> int main () { char palavra[10]; printf ("Digite uma string: "); gets (palavra); printf ("\n\nVoce digitou %s",palavra); return(0); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.7 - Comandos de entrada e saída Função getch() e getche() Muitas vezes queremos ler um caractere fornecido pelo usuário. Para isto as funções mais usadas, quando se está trabalhando em ambiente DOS ou Windows, são getch() e getche(). Ambas retornam o caractere pressionado. getche() imprime o caractere na tela antes de retorná-lo e getch() apenas retorna o caractere pressionado sem imprimí-lo na tela. Ambas as funções podem ser encontradas no arquivo de cabeçalho conio.h. Geralmente estas funções não estão disponíveis em ambiente Unix (compiladores cc e gcc), pois não fazem parte do padrão ANSI. (Exemplo 1) #include <stdio.h> #include <conio.h> /* Este programa usa conio.h . */ int main () { char Ch; Ch=getch(); printf ("Voce pressionou a tecla %c",Ch); return(0); } string 4 string 5 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 148 2.7 - Comandos de entrada e saída Função printf() A função printf() coloca na tela do computador o que se deseja imprimir: variáveis e/ou cadeia de caracteres. É por causa do uso da função printf() pelo programa que devemos incluir o arquivo-cabeçalho stdio.h. Veja os exemplos a seguir: printf (" O Volume do paralelepipedo e %f .",v); printf (" Foram produzidas %d peças .",x); printf (" O nome do gerente e %s .",nome); printf (" A letra escolhida foi %c .",letra) printf1 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 148 Comandos de atribuição Clique aqui 149 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 150 Escreva o algoritmo abaixo em linguagem C que realiza a soma de dois números. algoritmo "soma" var a, b, c: real inicio escreva("Entre com o primeiro numero:") Leia (a) Escreva("Entre com o segundo numero:") Leia (b) c<-a+b Escreval("A soma é:",c) Fimalgoritmo c = a + b; CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 150 Escreva o algoritmo abaixo em linguagem C para que um software a ser desenvolvido solicite do usuário as seguintes informações: nome, rua, número, bairro, CEP e cidade. O algoritmo deverá fazer a impressão de todas as informações na tela do computador 151 Algoritmo "Nome e Endereço" Var N1, Rua: caractere Inicio Escreval("#########Nome e Endereço#########") Escreval() //Entrada de Dados Escreval(" Entre com o seu nome:") Leia( N1 ) Escreval(" Entre com a rua em que reside:") Leia( Rua ) //saída dedados Escreva(" O nome do usuário é: ") Escreval( N1 ) Escreva(" O nome da rua em que reside é: ") Escreva( Rua ) Fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 152 Escreva o algoritmo abaixo em linguagem C que realiza o cálculo da média final dos alunos com 4 notas. algoritmo "media" var media, nota1, nota2, nota3, nota4: real inicio Escreval("Entre com as 4 notas") Leia(Nota1) Leia(Nota2) Leia(Nota3) Leia(Nota4) Media:=(Nota1 + Nota2 + Nota3 +nota4)/4 Escreva(" A media é:",media) fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 152 153 Escreva o algoritmo abaixo em linguagem C que realiza o cálculo da média final dos alunos com notas de duas NPs e uma nota do PIM. Algoritmo "Media ADS" var Media,NP1,NP2,notaPIM:real inicio Escreval("Entre com as notas das NPs: ") Leia(NP1) Leia(NP2) Escreval("Entre com a nota do PIM: ") Leia(notaPIM) Media:=(4*NP1 + 4*NP2 + 2*NotaPIM)/10 Escreva(" A média final é:",Media) fimalgoritmo CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 153 154 Escreva o algoritmo abaixo em linguagem C Algoritmo Veloc Variaveis V, Vo, a, DS, S, So : Real Inicio Escreva(“Entre com os valores de Vo, a, S e So”) Leia (Vo, a,S, So ) DS=S-So V=sqrt(Vo**2 + 2*a*DS) Escreva (“A velocidade e:”,V) Fim Torricelli.alg Obs: a instrução que calcula uma raiz quadrada na linguagem C é: sqrt( ). No escopo (início do código’) é necessário escrever a instrução #include <math.h> CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 154 155 Escreva em linguagem C o algoritmo abaixo escrito em pseudocódigo Algoritmo "Estoque medio" Var Est_Med, Qde_Min, Qde_Max : Real Inicio Escreval("entre com o valor da quantidade mímnima e máxima") Leia (Qde_Min, Qde_Max) Est_Med := (Qde_Min + Qde_Max)/2 Escreva ("O estoque médio é:",Est_Med) Fimalgoritmo Estoque medio.alg CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 155 156 Escreva em linguagem C o algoritmo abaixo escrito em pseudocódigo O algortimo faz a leitura de dois pontos quaisquer no plano, p1(x1,y1) e p2(x2,y2) e calcule a distância entre eles. Algoritmo distancia_dois_pontos Variáveis x2,x1,y2,y1,d : Real Inicio Escreva(“Entre com os pontos x1,y1 e x2,y2”) Leia (x1, y1) Leia (x2, y2) d = sqrt((x2-x1)**2+(y2-y1)**2) Escreva (“A distancia entre os dois pontos e:”,d) Fim Distancia2pontos.alg Obs: a instrução que calcula o quadrado de um número na linguagem C é: pow(x,2). No escopo (início do código’) é necessário escrever a instrução #include <math.h> CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 156 157 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 158 Exercícios do livro: página 42 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 159 Linguagem de Programação C Estrutura de Controle - Seqüenciação #include <stdio.h> int main () { int Dias; /* Declaracao de Variaveis */ float Anos; printf ("Entre com o número de dias: "); /* Entrada de Dados*/ scanf ("%d",&Dias); Anos=Dias/365.25; /* Conversao Dias->Anos */ printf ("\n\n%d dias equivalem a %f anos.\n",Dias,Anos); return(0); } segundo programa.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 159 160 2.8 - Bloco de instruções CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 160 161 2.8 - Bloco de instruções /* Um Primeiro Programa */ int main () { printf ("Primeiro Programa\n"); return(0); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 161 162 2.9 - Arquivos de cabeçalho Arquivo Cabeçalho - #include <stdio.h> A linha #include <stdio.h> diz ao compilador que ele deve incluir o arquivo-cabeçalho stdio.h. Neste arquivo existem declarações de funções úteis para entrada e saída de dados (std = standard, padrão em inglês; io = Input/Output, entrada e saída ==> stdio = Entrada e saída padronizadas). Toda vez que você quiser usar uma destas funções deve-se incluir este comando. O C possui diversos Arquivos-cabeçalho. Por exemplo, constantes e funções matemáticas estão guardadas na biblioteca math.h (mathematical functions), constantes e funções de manipulação teclado e monitor estão guardadas na biblioteca conio.h (console input and output). Para que se possa usar a constante simbólica em um programa é preciso incluir a biblioteca na compilação do programa. Sintaxe: A sintaxe de inclusão de bibliotecas é a seguinte: #include <nome_bib> CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 162 163 Exemplo Fazer o exercício abaixo em Linguagem C: Calcular e apresentar em vídeo o volume de uma caixa retangular utilizando a fórmula: Volume = Comprimento * Altura * Largura. Terceiro programa.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 163 164 Exercícios /* programa volume de um paralelepipedo*/ #include <iostream> #include <conio.h> main() { /* Declaracao de Variaveis */ float a,c,l,v; /* Entrada de Dados*/ printf ("Esse programa calcula o volume de um paralelepipedo \n\n"); printf ("Entre com a altura do paralelepipedo : "); scanf ("%f",&a); printf ("Entre com a largura do paralelepipedo: "); scanf ("%f",&l); printf ("Entre com a comprimento do paralelepipedo: "); scanf ("%f",&c); v=(a*l*c); /* Calculo do volume */ printf ("\n O Volume do paralelepipedo e %f .\n\n",v); /* Verificação Aluno */ // getch(); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 164 165 Exercícios Fazer o exercício abaixo em Linguagem C: Calcular e apresentar o valor do volume de uma lata de óleo sabendo-se que Volume = 3.14159 * RAIO² * ALTURA CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 165 166 Exercícios #include <iostream> #include <conio.h> main() { /* Declaracao de Variaveis */ float r,l,v; /* Entrada de Dados*/ printf ("Esse programa calcula o volume de uma lata \n\n"); printf ("Entre com o raio : "); scanf ("%f",&r); printf ("Entre com a altura: "); scanf ("%f",&l); v=(3.14*r*r*l); /* Calculo do volume */ printf ("\n O Volume da lata e %.2f .\n\n",v); /* Verificação Aluno */ getch(); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 166 Observações Função gets(): Lê string até o primeiro enter Função scanf() Lê string até o primeiro espaço em branco CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 168 Linguagem de Programação C Unidade 3 - Estruturas condicionais e de repetição 3.1 - Estruturas condicionais (if, else, switch) 3.2 - Estruturas de repetição (for, while, do...while) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 168 169 Unidade 3 - Estruturas condicionais e de repetição Estruturas de controle de Fluxo Estruturas de controle permitem controlar a seqüência das ações lógicas de um programa. Basicamente, existem dois tipos de estruturas de controle: estruturas de repetição e estruturas de decisão (estruturas condicionais). A estrutura de repetição permite que um bloco de instruções seja executado repetidamente uma quantidade controlada de vezes. A estrutura de decisão permite executar um entre dois ou mais blocos de instruções. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 169 170 3.1 - Estruturas condicionais if...else As Estruturas condicionais ou estruturas de decisão são muito utilizadas na linguagem C. A estrutura if...else é a mais simples estrutura de controle do C. Esta estrutura permite executar um entre vários blocos de instruções. O controle de qual bloco será executado será dado por uma condição (expressão lógica ou numérica).Esta estrutura pode se apresentar de modos ligeiramente diferentes. Será apresentada separadamente cada uma das possibilidades de sintaxe. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 170 171 3.1 - Estruturas condicionais if...else Decisão de um bloco (if...) A estrutura de decisão de um bloco permite que se execute (ou não) um bloco de instruções conforme o valor de uma condição seja verdadeiro ou falso. O fluxograma desta estrutura é mostrada na figura: CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 171 172 3.1 - Estruturas condicionais if...else Sintaxe: Decisão com um bloco: if(condição) { bloco } onde: condição é uma expressão lógica ou numérica. bloco é um conjunto de instruções. Se a condição verdadeira, o bloco é executado. Caso contrário, o bloco não é executado. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 172 173 3.1 - Estruturas condicionais if...else Exemplo: No trecho abaixo, se o valor da variável “a” for maior que a variável “b”, será impressa a primeira frase. Se a variável “b” for maior, será impresso a segunda frase. main (){ float a,b; puts("Digite dois numeros diferentes"); scanf("%f%f",&a,&b); if (a>b) {printf("\n\t %.2f e'maior que %.2f ",a,b);} else if (b>a) {printf("\n\t %.2f e'maior que %.2f",b,a);} else {printf("\n\t %.2f e igual a %.2f",b,a);} getch(); Exemplo 1.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 173 174 3.1 - Estruturas condicionais: if...else Também é possível escrever uma estrutura que execute um entre dois blocos de instruções. A figura mostra o fluxograma correspondente a esta estrutura de decisão. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 174 175 3.1 - Estruturas condicionais: if...else Sintaxe: Decisão de dois blocos: if(condição) { bloco 1; } else { bloco 2; } onde: condição é uma expressão lógica ou numérica. bloco 1 e bloco 2 são conjuntos de instruções. Se a condição for verdadeira o bloco 1 é executado. Caso contrário, o bloco 2 é executado. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 175 176 3.1 - Estruturas condicionais: if...else Exemplo: No trecho abaixo, se o valor da variável opcao for igual a “s”, será executada a soma de 2 numeros. Observe que se digitar “S” (S maiúsculo) será impresso opcao invalida. Se for digitado “u” ou “U”, será realizada a subtração de dois números. main (){ char opcao; float a,b,x; puts("Selecione a operação matema'tica: S- Soma; U-Subtracao;\n"); scanf("%s",&opcao); printf("\n\t Entre com os dois numeros\n"); scanf("%f%f",&a,&b); if (opcao=='s') {x=a+b; printf("\n\t A soma e':%.2f \a",x);} else if(opcao=='u'||opcao=='U') { x=a-b; printf("\n\t A subtracao e'%.2f \a",x); } else printf("opcao invalida");} exemplo2.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 176 177 3.1 - Estruturas condicionais: if...else Também é possível escrever uma estrutura que execute um entre múltiplos blocos de instruções. A figura mostra o fluxograma correspondente a esta estrutura de decisão . CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 177 178 3.1 - Estruturas condicionais: if...else Sintaxe: Decisão de múltiplos blocos: if(condição 1) { bloco 1; ... } else if(condição N) { bloco N; } else { bloco P } onde: condição 1, condição 2, ... são expressões lógicas ou numéricas. bloco 1 , bloco 2,... são conjuntos de instruções. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 178 179 3.1 - Estruturas condicionais: if...else Exemplo: No trecho abaixo, uma determinada ação é executada se o valor de num for positivo, negativo ou nulo. if(num > 0) { a = b; } else if(num < 0) { a = b + 1; } else { a = b - 1; } num a 1 5 -2 6 0 4 b = 5 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 179 Exercícios 180 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 181 3.1 - Estruturas condicionais: if...else Exercício: 1- Faça um programa para realizar a multiplicação ou a divisão. O usuário deverá entrar com a opção de qual operação ele deseja fazer e entrar com os valores das variáveis que serão utilizadas nas multiplicação ou na divisão. Fórmulas: x= a*b; x=a / b. Calculadora if.cpp Calculadora if2.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 181 182 3.1 - Estruturas condicionais: if...else Exercícios Utilize o algoritmo em pseudocódigo para fazer um programa em C para calcular e a raiz quadrada de um número. Esse programa deverá informar que não é possível calcular raiz quadrada de número negativo. se Num>=0 então X=sqrt(Num); Escreva (" A raiz quadrada é ",X) senão Escreva("Nao e possivel calcular raiz quadrada de numero negativo!"); CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 182 183 3.1 - Estruturas condicionais: if...else Exercícios Fazer um programa em C que leia a idade de uma pessoa e informe se ela é maior ou menor de idade. Maior de idade é todo aquele que tem acima de 18 anos (inclusive). maior de idade.cpp Algoritmo Verif_Maioridade Var Idade: inteiro Início Leia Idade Se Idade >=18 Então Escreva “Maior de idade” Senão Escreva “Menor de idade” Fim_se Fim CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 183 184 3.1 - Estruturas condicionais: if...else Exercícios Faça um programa em C que leia dois valores numéricos e efetue a adição. Caso o valor somado seja maior ou igual a 10, deverá ser apresentado esse valor acrescido de 5. Caso o valor seja menor que 10, deverá ser apresentado esse valor subtraído de 7. X=A+B Se x>=10 Escrever (x+5) Se x<10 Escrever (x-7) Exemplo 4.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 184 185 3.1 - Estruturas condicionais: if...else Exercícios - Escreva um programa em C que apresenta as seguintes condições: a) Se a média for menor que 3.0 o aluno é reprovado. b) Se a média for maior ou igual a 3.0 e menor que 6.0, o aluno deverá fazer outra prova. c) Se a média for maior ou igual a 6.0, o aluno está aprovado. Para se fazer a média deverá haver duas notas como entradas. Media <3.0 Escrever (Reprovado) 3<=Media<6.0 Escrever (Outra Prova) Se x>=6.0 Escrever (aprovado) Medias 4 notas.cpp Media.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 185 186 3.1 - Estruturas condicionais: if...else Exercícios - Escreva um programa em C que apresenta as seguintes condições: a) Se a média for menor que 3.0 o aluno é reprovado. b) Se a média for maior ou igual a 3.0 e menor que 6.0, o aluno deverá fazer outra prova. c) Se a média for maior ou igual a 6.0, o aluno está aprovado. Para se fazer a média deverá haver duas notas como entradas. Medias 4 notas.cpp Media.cpp Algoritmo Aprovação Var Media: real Início Leia N1 Leia N2 Se Media < 3,0 Então Escreva “ Aluno Reprovado” Senão Se Media >= 6,0 Então Escreva “Aluno aprovado” Senão Escreva “O aluno fará o exame.” CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 186 Pág. 55 187 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 188 3.1 - Estruturas condicionais: switch...case A estrutura switch...case é uma estrutura de decisão que permite a execução de um conjunto de instruções a partir pontos diferentes conforme o resultado de uma expressão inteira de controle. O resultado desta expressão é comparado ao valor de cada um dos rótulos, e as instruções são executadas a partir deste rótulo. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTODE SISTEMAS 188 189 3.1 - Estruturas condicionais: switch...case Sintaxe: Esta estrutura possui a seguinte sintaxe: switch(expressão){ case rótulo_1: conjunto_1 case rótulo_2: conjunto_2 ... case rótulo_n: conjunto n [default: conjunto d] } onde: expressão é uma expressão inteira. rótulo_1,rótulo_2,...rótulo_n e rótulo_d são constantes inteiras. conjunto 1, conjunto 2, ..., conjunto n e conjunto d são conjuntos de instruções. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 189 190 3.1 - Estruturas condicionais: switch...case O valor de expressão é avaliado e o fluxo lógico será desviado para o conjunto cujo rótulo é igual ao resultado da expressão e todas as instruções abaixo deste rótulo serão executadas. Caso o resultado da expressão seja diferente de todos os valores dos rótulos então conjunto d é executado. Os rótulos devem ser expressões constantes inteiras diferentes entre si. O rótulo default é opcional. Esta estrutura é particularmente útil quando se tem um conjunto de instruções que se deve executar em ordem, porém se pode começar em pontos diferentes. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 190 191 3.1 - Estruturas condicionais: switch...case Exemplo: O trecho abaixo ilustra o uso da instrução switch em um menu de seleção. Neste exemplo, o programa iniciará o processo de usinagem de uma peça em um ponto qualquer dependendo do valor lido. int selecao; puts("Digite estagio de usinagem:"); scanf("%d",&selecao); switch(selecao){ case 1: // desbaste grosso... case 2: // desbaste fino... case 3: // acabamento... case 4: // polimento... } Selecao case.cpp Selecao2 case.cpp Centro de Usinagem CNC CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 191 CNC = Controle numérico por computador ou computadorizado 192 3.1 - Estruturas condicionais: switch...case Exercício: Utilizando a estrutura switch...case, faça um programa para fazer as 4 operações aritméticas soma,subtração, divisão e multiplicação. Observe que pode-se digitar letra maiúscula ou minúscula no programa selecao2 case.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 192 Operadores Incrementais Em programação existem instruções muito comuns chamadas de incremento e decremento. Uma instrução de incremento adiciona uma unidade ao conteúdo de uma variável. Uma instrução de decremento subtrai uma unidade do conteúdo de uma variável. Existem, em C, operadores específicos para realizar as operações de incremento (++) e decremento (--). Sintaxe: A sintaxe dos operadores incrementais é a seguinte: instrução equivalente ++ var var = var + 1 var ++ var = var + 1 -- var var = var - 1 var -- var = var - 1 193 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 194 Relembrando (slide Unidade 2) Operadores Incrementais Exemplo: Observe o fragmento de código abaixo e note o valor que as variáveis recebem após a execução da instrução: valor das variáveis int a=0, b=0, c=0, i = 3; // a:0 b: 0 c: 0 i: 3 a = i++; // a: 3 b: 0 c: 0 i: 4 b = ++i; // a: 3 b: 5 c: 0 i: 5 c = --i; // a: 3 b: 5 c: 4 i: 4 Os operadores incrementais tem a mais alta precedência entre todos, sendo superados apenas pelos parênteses que tem precedência ainda maior CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 194 Exercício 2 Dado o seguinte algoritmo: Programa p1; var i,j,k:inteiro inicio leia(i) leia(j) leia(k) se (i>j) e (i>k) então escreva(i) senão se j>k ntão escreva(j) senao escreva(k) fimse fimse fim. 195 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 196 3.2 - Estruturas de repetição (for, while, do...while): Condição de controle A estrutura de repetição permite que um bloco de instruções seja executado repetidamente uma quantidade controlada de vezes. Em todas as estruturas, existe pelo menos uma expressão que faz o controle de qual bloco de instruções será executado ou quantas vezes ele será executado: é o que chamamos de condição de controle. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 196 197 3.2 - Estruturas de repetição (for, while, do...while): Condição de controle Uma condição de controle é uma expressão lógica ou aritmética cujo resultado pode ser considerado verdadeiro ou falso. A linguagem C não possui variáveis ou constantes lógicas, possui somente expressões numéricas. Assim, quando uma expressão numérica se encontra em uma condição de controle, ela será considerada falsa se seu valor for igual a zero, e verdadeira se seu valor for diferente de zero. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 197 198 3.2 - Estruturas de repetição (for, while, do...while): Condição de controle Exemplo: Observe nas condições abaixo, seu valor numérico e seu significado lógico. Considere as variáveis int i = 0, j = 3; condição valor numérico significado lógico (i == 0) 1 verdadeiro (i > j) 0 falso (i) 0 falso (j) 3 verdadeiro Este fato deve ficar claro pois, quando for dito que uma condição é falsa ou verdadeira quer se dizer que seu valor e igual a zero ou diferente de zero. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 198 199 3.2 - Estruturas de repetição: do...while Estrutura do...while Esta estrutura faz com que o bloco de instruções seja executado pelo menos uma vez. Após a execução do bloco, a condição é avaliada. Se a condição for VERDADEIRA o bloco é executado outra vez. Se a condição for FALSA a repetição é terminada. Esta é uma estrutura básica de repetição condicional. Permite a execução de um bloco de instruções repetidamente. O fluxograma desta estrutura é mostrada na figura . CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 199 200 3.2 - Estruturas de repetição: do...while Sua sintaxe é a seguinte: do { bloco } while(condição); onde: condição é uma expressão lógica ou numérica. bloco é um conjunto de instruções. Do_While1.cpp do { printf("\n %d ",i); i++; } while (i<=8); CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 200 201 3.2 - Estruturas de repetição: do...while Veja o exemplo: Exemplo 1 Do_While.cpp int main (){ setlocale(LC_ALL,"") ; char r; do { printf("\nTeste de estrutura de repetição do...while"); printf(" \n Deseja continuar? (s)Sim ou (n) Não\n"); scanf("%s",&r); } while (r =='s'); printf("\n Saiu do laço do...while !!!"); } while (r =='s'||r =='S'); CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 201 202 3.2 - Estruturas de repetição: do...while Veja o exemplo: Exemplo 2 Do_While.cpp int main (){ setlocale(LC_ALL,"") ; int r; do { printf("\nTeste de estrutura de repetição do...while"); printf(" \n Deseja continuar? (1) Sim\n"); scanf("%d",&r); } while (r == 1); printf("\nSaiu do laço do...while !!!"); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 202 203 3.2 - Estruturas de repetição: do...while Veja o exemplo: Exemplo 3 Do_While.cpp int main (){ setlocale(LC_ALL,"") ; int r; do { printf("\nTeste de estrutura de repetição do...while"); printf(" \n Deseja continuar? (0) Não\n"); scanf("%d",&r); } while (r != 0); printf("\nSaiu do laço do...while !!!"); } while ( r ); CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 203 204 3.2 - Estruturas de repetição: do...while Exemplo: No trecho abaixo, a leitura de um número é feita dentro de um laço de repetição condicional. A leitura é repetida caso o número lido seja negativo. do{ puts("Digite um número positivo:");scanf("%f",&num); } while(num <= 0.0); Do_While3.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 204 205 3.2 - Estruturas de repetição: do...while Na linguagem C o valor 0 (zero) é considerado valor lógico falso e qualquer número que não seja 0 (zero) recebe valor lógico verdadeiro (true). Veja o exemplo abaixo: Do_While4.cpp int main (){ int i=10; float x,y=10.0; do { y=y+3; printf("\n O i= %d y= %.2f",i,y); i--; } while (i); } Do_While2.cpp int i=0; float x,y; do { y=y+3; printf("\n %d %4.2f",i,y); i++; } while (i<=9); CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 205 206 3.2 - Estruturas de repetição: do...while Exercício: Utilize a estrutura do...while para imprimir os 10 primeiros números ímpares. Altere o programa para mostrar a posição de cada número ímpar: Altere a estrutura anterior para realizar a soma dos 10 primeiros números ímpares. Imprime impares2.cpp Soma impares.cpp Imprime impares.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 206 207 3.2 - Estruturas de repetição: while Estrutura while A estrutura de repetição condicional while é semelhante a estrutura do...while. Sua sintaxe é a seguinte: Sintaxe: while(condição){ bloco } onde: condição é uma expressão lógica ou numérica. bloco é um conjunto de instruções. while (i<=8) { printf("\n %d ",i); i++; } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 207 208 3.2 - Estruturas de repetição: while Esta estrutura faz com que a condição seja avaliada em primeiro lugar. Se a condição for verdadeira o bloco é executado uma vez e a condição é avaliada novamente. Caso a condição seja falsa a repetição é terminada sem a execução do bloco. Observe que nesta estrutura, ao contrário da estrutura do...while, o bloco de instruções pode não ser executado nenhuma vez, basta que a condição seja inicialmente falsa. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 208 209 3.2 - Estruturas de repetição: while O fluxograma desta estrutura é mostrada na figura abaixo: CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 209 210 3.2 - Estruturas de repetição: while Exercício: Utilize a estrutura while para imprimir os 10 primeiros números ímpares. Altere o programa para mostrar a posição de cada número ímpar: Altere a estrutura anterior para realizar a soma dos 10 primeiros números ímpares. impares2 WHILE.cpp Soma impares wHILE.cpp Impares WHILE.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 210 211 3.2 - Estruturas de repetição: for A estrutura for A estrutura for é muito semelhante as estruturas de repetição vistas anteriormente, entretanto costuma ser utilizada quando se quer um número determinado de ciclos. A contagem dos ciclos é feita por uma variável chamada de contador. A estrutura for é, às vezes, chamada de estrutura de repetição com contador. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 211 212 3.2 - Estruturas de repetição: for Sua sintaxe é a seguinte : for(inicialização; condição; incremento){ bloco } onde: inicialização é uma expressão de inicialização do contador. condição é uma expressão lógica de controle de repetição. incremento é uma expressão de incremento do contador. bloco é um conjunto de instruções a ser executado. for(i=1; i<=10; i++) { printf(" %d",i); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 212 213 3.2 - Estruturas de repetição: for Esta estrutura executa um número determinado de repetições usando um contador de iterações. O contador é inicializado na expressão de inicialização antes da primeira iteração. Por exemplo: i = 0; ou cont = 20;. Então o bloco é executado e depois de cada iteração, o contador é incrementado de acordo com a expressão de incremento (i++ ou cont = cont - 2). A expressão de condição é avaliada e se a condição for verdadeira, o bloco é executado novamente e o ciclo recomeça, se a condição for falsa termina-se o laço. Esta condição é, em geral, uma expressão lógica que determina o último valor do contador. Por exemplo: i <= 100. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 213 214 3.2 - Estruturas de repetição: for Exemplo: No trecho abaixo, o contador i é inicializado com o valor 1. O bloco é repetido enquanto a condição i <= 10 for verdadeira. O contador é incrementado com a instrução i++. Esta estrutura, deste modo, imprime os números 1, 2, ..., 9, 10. for(i=1; i<=10; i++) { printf(" %d",i); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 214 215 3.2 - Estruturas de repetição: for Exercício: Utilize a estrutura FOR para imprimir os 10 primeiros números ímpares, mostrando a posição de cada número primo: Altere a estrutura anterior para realizar a soma dos 10 primeiros números ímpares. Soma impares FOR.cpp Imprime impares FOR CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 215 216 3.2 - Estruturas de repetição: for É interessante notar que a mesma estrutura lógica pode ser implementada usando as estruturas for ou do...while: Exemplo: As seguintes instruções são plenamente equivalentes: i = 0; for(i = 0; i <= 100; i++){ do{ bloco bloco } i++; }while(i <= 100); Podem existir mais de uma expressão de inicialização e de incremento na estrutura for. Estas expressões devem ser separadas por vírgula (,). Mas não pode haver mais de uma expressão de condição. Por exemplo: for(i=0, j=10; i<10; i++, j--){...} Soma impares FOR2.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 216 217 3.2 - Estruturas de repetição: for int main (){ int i=10; float x,y=10.0; do { y=y+3; printf("\n O i= %d y= %.2f",i,y); i--; } while (i); } Podem existir mais de uma expressão de inicialização e de incremento na estrutura for. Estas expressões devem ser separadas por vírgula (,). Mas não pode haver mais de uma expressão de condição. Por exemplo: for(i=0, j=10; i<10; i++, j--){...} Soma impares FOR2.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 217 Utilize o laço de repetição while ou do...while para alterar o programa Calculadora com a finalidade de perguntar ao usuário se deseja continuar. Enquanto ele responder “sim” o software volta ao início para perguntar qual operação deseja fazer. 218 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 219 #include <stdio.h> int main() { float num_1, num_2, operacao; char op; printf("\n Entre com a operacao desejada: (+), (-) \n"); scanf("%s",&op); printf("Entre com o 1o. : "); scanf("%f",&num_1); printf("Entre com o 2o. Numero: \n"); scanf("%f",&num_2); switch(op){ case '+' :operacao = num_1+num_2; printf("\nA soma destes numeros e' %.2f", operacao); break; case '-' :operacao = num_1-num_2; printf("\nA subtracao destes numeros e' %.2f", operacao); break; default : printf("Operador desconhecido\n"); } } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Escreva um programa em C que utilize a estrutura FOR para converter temperaturas de 0 a 100 graus Celsius para Fahrenheit e de 0 a 100 Graus Fahrenheit para graus Celsius. Utilize a estrutura if...else para escolher qual conversão se deseja fazer. Fórmulas: Fahr = (9.0/5.0) * Celsius+32; Celsius = (5.0/9.0)*(Fahr-32). 220 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Escreva um programa utilizando a estrutura de repetição for para calcular a raiz quadrada dos 50 primeiros números inteiros. Escreva um programa utilizando a estrutura de repetição do...while para calcular a raiz quadrada dos 50 primeiros números inteiros pares. Construa um programa utilizando a estrutura for que determine asoma dos dez primeiros termos da seguinte série: 5, 11, 17, 23. 221 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exercício Conteúdo: estruturas de decisão e de repetição. Faça um programa em linguagem C para obedecer aos seguintes requisitos: Apresente para o usuário os 10 primeiros números ímpares e sua soma ou os 10 primeiros números pares. Utilize uma estrutura de decisão “if else” OU “switch case” para atender à decisão do usuário. Utilize a estrutura de repetição determinada “for” para fazer os 10 números pares ou os 10 números ímpares. O programa irá fechar quando o usuário decidir. Utilize uma estrutura de repetição indeterminada do tipo “while” ou “do...while” para fechar o aplicativo . 222 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Exercício Conteúdo: estruturas de decisão e de repetição. Faça um programa em linguagem C para obedecer aos seguintes requisitos: Faça a conversão de temperatura de graus Celsius para graus Fahrenheit; de graus Fahrenheit para graus Celsius e de graus Celsius para Kelvin utilizando uma estrutura de decisão “if else” OU “switch case”. Apresente o resultado da conversão na tela e as variáveis de temperatura têm que ser um número do conjunto dos Reais. O programa irá fechar quando o usuário decidir. Utilize uma estrutura de decisão do tipo “while” ou “do...while”. As equações de conversão são: F=(9*C + 160)/5 ou F = (9.0 / 5.0) * C +32; ou F = 1,8 * C + 32 C = (5*F - 160)/9 ou C = ( 5.0 / 9.0 ) * ( F – 32 ); K=C+273 223 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Módulo 3 exercício 9 224 No que se refere a forma de declaração de um laço for, é correto afirmar: A for (i=1 ; i<5 ; i++) printf("O valor é %d ", i+4); B for(i=1 , i<5 , i++) printf(“O valor é: %d ”, i+4) C for(i=1; i<5 , i ++) printf(“O valor é %d ” ; i+4); D for(i=1 , i<5 , i++); printf(“O valor é %d”, i+4); E for(i=1 ; i<5 ; i++); printf(“O valor é %d”, i+4); CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 225 Qual saída produzida pela execução do laço seguinte? #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> void main() { int conta=0; int total=0; while (conta<10) { total+=conta; printf("conta = %d, total= %d \n", conta++, total); } getche(); } Módulo 3 exercício 10 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 226 Módulo 3 exercício 10 A conta = 1, total= 1 conta = 2, total= 3 conta = 3, total= 6 conta = 4, total= 10 conta = 5, total= 15 conta = 6, total= 21 conta = 7, total= 28 conta = 8, total= 36 conta = 9, total= 45 B conta = 0, total= 0 conta = 2, total= 1 conta = 3, total= 3 conta = 4, total= 6 conta = 5, total= 10 conta = 6, total= 15 conta = 7, total= 21 conta = 8, total= 28 conta = 9, total= 36 conta = 10, total= 45 C conta = 0, total= 1 conta = 1, total= 2 conta = 2, total= 3 conta = 3, total= 6 conta = 4, total= 10 conta = 5, total= 15 conta = 6, total= 21 conta = 7, total= 28 conta = 8, total= 36 conta = 9, total= 45 D conta = 0, total= 0 conta = 1, total= 1 conta = 2, total= 3 conta = 3, total= 6 conta = 4, total= 10 conta = 5, total= 15 conta = 6, total= 20 conta = 7, total= 20 conta = 8, total= 30 conta = 9, total= 40 E conta = 0, total= 0 conta = 1, total= 1 conta = 2, total= 3 conta = 3, total= 6 conta = 4, total= 10 conta = 5, total= 15 conta = 6, total= 21 conta = 7, total= 28 conta = 8, total= 36 conta = 9, total= 45 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Expressões aritméticas e lógicas; Operadores Aritméticos 227 Voltar CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Expressões aritméticas e lógicas; Operadores Aritméticos Operador Ação + Soma (inteira e ponto flutuante) - Subtração ou Troca de sinal (inteira e ponto flutuante) * Multiplicação (inteira e ponto flutuante) / Divisão (inteira e ponto flutuante) % Resto de divisão (de inteiros) ++ Incremento (inteiro e ponto flutuante) -- Decremento (inteiro e ponto flutuante) CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Expressões aritméticas e lógicas; Operadores Aritméticos Restrições de operandos. Os operandos dos operadores aritméticos devem ser constantes numéricas ou identificadores de variáveis numéricas. Os operadores +, -, *, / podem operar números de todos os tipos (inteiros ou reais) porém o operador % somente aceita operandos inteiros. Exemplo: Expressões válidas Expressão Valor 6.4 + 2.1 8.5 7 - 2 5 2.0 * 2.0 4.0 6 / 3 2 47 % 2 1 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Precedência de Operadores Quando mais de um operador se encontram em uma expressão aritmética as operações são efetuadas uma de cada vez respeitando algumas regras de precedência: Estas regras de precedência são as mesmas da matemática elementar. Os operadores de multiplicação (*), divisão (/) e módulo (%) tem precedência sobre os operadores de adição (+) e subtração (-). Entre operadores de mesma precedência as operações são efetuadas da esquerda para a direita. Exemplo: observe, nas expressões abaixo, o seu valor e a ordem das operações efetuadas: Expressão Valor Ordem 1 + 2 - 3 0 + - 24 - 3 * 5 9 * - 4 - 2 * 6 / 4 + 1 2 * / - + 6 / 2 + 11 % 3 * 4 11 / % * + Precedência .cpp Obs: a ordem de precedência dos operadores pode ser quebrada usando-se parênteses: ( ). CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 231 #include <stdio.h> #include <math.h> main() { float x,y,z; y = 4 - 2 * 6 / 4 + 1;// 4-3+1 = 2 x=6 / 2 + 11 % 2 * 4;// 3+1*4=7 z=6 / 2 + 11 % (2*4);// 3+11%8=3+1=4 printf(" y= %.2f, \n",y); printf(" x= %.2f, \n",x); printf(" z= %.2f, \n",z); } Precedência de Operadores CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Expressões aritméticas e lógicas; Operadores de Atribuição Aritmética Muitas vezes queremos alterar o valor de uma variável realizando alguma operação aritmética com ela (i = i + 1) (val = val * 2). Embora seja perfeitamente possível escrever estas instruções, foi desenvolvido na linguagem C uma instruções otimizadas com o uso de operadores ditos operadores de atribuição aritmética. Os símbolos usado são (+=, -=, *=, /= , %=). Deste modo as instruções acima podem ser rescritas como: i += 1 e val *= 2, respectivamente. Sintaxe: A sintaxe da atribuição aritmética é a seguinte: var += exp; var -= exp; var *= exp; var /= exp; var %= exp; var = var + exp; var = var - exp; var = var * exp; var = var / exp; var = var % exp; i+= <-> i = i + 1 Atribuiçao aritmética .cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Expressões aritméticas e lógicas; Operadores Incrementais Muitas vezes queremos alterar o valor de uma variável realizando alguma Em programação existem instruções muito comuns chamadas de incremento e decremento. Uma instrução de incremento adiciona uma unidade ao conteúdo de uma variável. Uma instrução de decremento subtrai uma unidade do conteúdo de uma variável. Existem, em C, operadores específicos para realizar as operações de incremento (++) e decremento (--). Eles são genericamente chamados de operadores incrementais. Sintaxe: A sintaxe dos operadores incrementais é a seguinte: ++ var var = var + 1 var ++ var = var + 1 -- var var = var - 1 var -- var = var - 1 Operador incremental .cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Expressões aritméticas e lógicas Operadores Incrementais Observe que existe duas sintaxes possíveis para os operadores: pode-se colocar o operador à esquerda ou á direita da variável. Nos dois casos o valor da variável será incrementado (ou decrementado) de uma unidade.Se o operador for colocado á esquerda da variável, o valor da variável será incrementado (ou decrementado) antes que a variável seja usada em alguma outra operação. Caso o operador seja colocado à direita da variável, o valor da variável será incrementado (ou decrementado) depois que a variável for usada em alguma outra operação. Operador incremental 2.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 235 #include <stdio.h> #include <math.h> main() { //declaração da variável int i=0,j=0,k=0,z=0, a=0; ++i; printf(" i= %d, \n\n",i); j++ ; printf(" j= %d, \n\n",j); --k; printf(" k= %d, \n\n",k); z-- ; printf(" z= %d, \n\n",z); printf("*************************\n"); // zerando as variáveis i=0;j=0;k=0;z=0; a=++i; printf(" i= %d,\t a=%d\n\n",i,a); a=0; a=j++ ; printf(" j= %d,\t a=%d\n\n",j,a); a=0; a=--k; printf(" k= %d,\t a=%d\n\n",k,a); a=0; a=z-- ; printf(" z= %d,\t a=%d\n\n",z,a); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 236 #include <stdio.h> #include <math.h> main() { //declaração da variável int a=0, b=0, c=0, i = 3; // a: 0 b: 0 c: 0 i: 3 a = i++; printf("++ a Direita \ta= %d, i= %d, \n\n",a,i); i=3; b = ++i; printf("++ a Esquerda \t b= %d, i= %d, \n\n",b,i); i=3; c = i--; printf("-- a Direita \t c= %d, i= %d, \n\n",c,i); i=3; c = --i; printf("-- a Esquerda \t c= %d, i= %d, \n\n",c,i); } CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Expressões aritméticas e lógicas Operadores relacionais Os operadores relacionais retornam verdadeiro (1) ou falso (0). Uma condição de controle é uma expressão lógica que é avaliada como verdadeira ou falsa. Uma expressão lógica é construída com operadores relacionais e lógicos. Ao contrário de outras linguagens, em C não existem tipos lógicos, portanto o resultado de uma expressão lógica é um valor numérico: uma expressão avaliada verdadeira recebe o valor 1, uma expressão lógica avaliada falsa recebe o valor 0. Operador Ação > Maior do que >= Maior ou igual a < Menor do que <= Menor ou igual a == Igual a != Diferente de Operador relacional .cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Expressões aritméticas e lógicas Operadores lógicos São três os operadores lógicos de C: &&, || e !. Estes operadores tem o mesmo significado dos operadores lógicos Booleanos AND, OR e NOT. Sintaxe: A sintaxe de uso dos operadores lógicos: expr_1 && expr_2 expr_1 || expr_2 !expr onde expr_1 , expr_2 e expr são expressões quaisquer. CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.5 - Expressões aritméticas e lógicas Operadores lógicos O resultado da operação lógica && será 1 somente se os dois operandos forem 1, caso contrário o resultado é 0. O resultado da operação lógica || será 0 somente se os dois operandos forem 0, caso contrário o resultado é 1. O resultado da operação lógica ! será 0 se o operandos for 1, e 1 se o operando for 0. Abaixo mostra-se o resultado das possíveis combinações entre os operandos para cada operador lógico: OP_1 OP_2 RESULTADO 1 1 1 1 0 0 0 1 0 0 0 0 OP_1 OP_2 RESULTADO 1 1 1 1 0 1 0 1 1 0 0 0 Operador && (AND – E) Operador ||(OR - OU) Operador ! (NO – NÃO) OP_1 RESULTADO 1 0 0 1 CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Aplicação Operadores lógicos && (AND) e ! (NO) Operadores lógicos || (OR) e ! (NO) Programa operador logico and operador logico OU CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.6 - Comando de atribuição O operador de atribuição do C é o =. O que ele faz é pegar o valor à direita e atribuir à variável da esquerda. Além disto ele retorna o valor que ele atribuiu. Isto faz com que as seguintes expressões sejam válidas: float x=1.5, k=2.3, w=3.5; /* Expressao 1 */ if (k==w) ... /* Expressão 2 */ Atribuição.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.6 - Comando de atribuição Observem que o símbolo de atribuição ( = ) não tem o mesmo significado que o usual da matemática que representa a igualdade de valores. Este símbolo, em C, representa a atribuição do valor calculado em expressão a variável identificador. Em pseudo-linguagem o operador de atribuição é representado como . Também não se pode confundir o operador de atribuição ( = ) com o operador relacional de igualdade ( == ) Exemplo: A seguir são mostradas algumas atribuições inválidas: 1 = a; // constante! b + 1 = a; // expressão! CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS 2.6 - Comando de atribuição Atribuição múltipla E possível atribuir um valor a muitas variáveis em uma única instrução. A esta operação dá-se o nome de atribuição múltipla. Sintaxe: A sintaxe da atribuição múltipla é seguinte: var_1 = [var_2 = ... ] expressão; onde var_1, var_2, ... são os identificadores de variáveis e expressão é uma expressão válida. Observe que na atribuição múltipla as operações ocorrem da direita para a esquerda, isto é, inicialmente o valor de expressão é atribuído a var_2 e depois o valor de var_2 é atribuído a var_1. Deve-se tomar cuidado com as conversões de tipo e limites de intervalo para atribuições de tipos diferentes. Atribuição 2.cpp CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Expressões aritméticas e lógicas; Operadores Aritméticos FIM 244 Voltar CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS s a v v D + = . . 2 2 0 s a v v D + = . . 2 2 0 2 ( ) ( ) 2 1 2 2 1 2 y y x x d - + - = 6 , 3 1 3600 1000 1 3600 1 1000 1 036 , 0 001 , 0 036 , 0 001 , 0 1 1 = = = ® = « ® x h km s m h km s m 8 ... 27777 , 0 6 , 3 1 3600 1000 1 1 = ® = « ® s m h km s m h km condição bloco V F condição? bloco 1 bloco 2 ������������������������������������������������������������������������� F V F V F V . . . . . . bloco 3 3? Condição bloco 2 2? Condição bloco 1 1? Condição Condição 1? bloco 1 Condição 2? bloco 2 Condição 3? bloco 3 . . . . . . V F V F V F conjunto 1 conjunto N conjunto 2 conjunto D ... expressão rotulo 1 rotulo N rotulo D rotulo 2 bloco condição? V F bloco condição? V F