Baixe o app para aproveitar ainda mais
Prévia do material em texto
Prof. MSc Orlei José Pombeiro 1 Graduação Análise de Sistemas Estrutura de Dados Aula 01 Orlei José Pombeiro Prof. MSc Orlei José Pombeiro 2 Prof. MSc Orlei José Pombeiro 3 Conversa Inicial Nesta aula vamos abordar o conceito de Estrutura de Controle. Muito utilizado em programação, as Estruturas de Controle podem ser divididas em dois tipos: Seleção e Repetição. Similar a situação de nosso dia a dia onde tomamos várias decisões, muitas sem pensar, quando desenvolvemos sistemas constantemente nos deparamos com momentos que temos que tomar uma decisão para que lado devemos ir. Decisões estas em programação baseadas sempre em um conceito lógico “Se For Verdadeiro Faça ... ” ou “Se For Falso Faça .... ”. Assim como quando falamos em repetir tarefas, onde utilizamos o conceito de repetir uma determinada tarefa quantas vezes forem necessárias, também baseada em uma decisão lógica, “Enquanto For Verdadeiro Faça ... ”. Contextualização Vamos falar primeiramente de Estruturas de Decisão. Na literatura é possível encontrar referência a: Estrutura de Controle Simples; Estrutura de Controle Composta; Estrutura de Decisão; Estrutura de Seleção. Todas estas nomenclaturas são referência para a mesma estrutura, para os mesmos comandos da linguagem. A linguagem C comporta dois tipos de Estrutura de Decisão: “if” e ”switch”. Como todas as linguagens de programação foram desenvolvidas em inglês, todos os comandos utilizam palavras em inglês para referencias as ações nos programas e em sua quase totalidade em letras minúsculas. Outro tipo de estrutura muito utilizada em programação é a de Repetição. Utilizamos este tipo de estrutura quando desejamos repetir uma determinada tarefa por um número “N” vezes. Dizemos que criamos um “loop” para executar a tarefa repetidas vezes. Podemos encontrar 3 tipos de Estruturas de Repetição “For”, “While” e “Do While”. Na literatura é possível encontrar as seguintes nomenclaturas para estas estruturas: while -> Enquanto; for -> Para; do while -> Repita. Prof. MSc Orlei José Pombeiro 4 Tema 1 - If Quando falamos em colocar uma estrutura de decisão no programa, dizemos simplesmente “coloque um SE” ou “coloque um IF”. A seguir está a comparação das linhas de comando em Português Estruturado e na Linguagem de Programação: SE ( Condição Lógica é Verdadeira ) if ( 7 > 4 ) Execute tarefa A, B, C Execute tarefa A, B, C SENÃO For Verdadeira else Execute tarefa E,F, G Execute tarefa E,F, G A estrutura “IF” pode ser descrita como uma estrutura simples, onde somente executaremos uma determinada ação se a condição for verdadeira, caso contrário não será executado nada. Vamos observar o algoritmo. É solicitado que usuário informe sua idade, caso seja 16 ou mais, o sistema informa que ele pode votar e na sequencia aparece na tela a palavra “Obrigado”. Caso ele tenha 15 anos ou menos, somente a palavra “Obrigado” aparece na tela. NÃO SIM SIM Início Informe sua idade Ler idade Se idade > 15 Você já pode votar Obrigado Fim #include <stdio.h> #include <stdlib.h> void main(){ int x = 0; printf( "Informe sua idade: " ); scanf_s( "%d", &x ); if (x > 15) printf( "Você já pode votar\n" ); printf( "Obrigado\n" ); system( "pause" ); } Prof. MSc Orlei José Pombeiro 5 Sobre este exemplo, podemos alterá-lo para uma “Estrutura de Decisão Composta”. Ou seja, se a condição for “Verdadeira”, informe que o usuário pode votar, mas se for “Falsa”, informe que ele ainda não tem idade para votar. Outra situação que temos aqui é com relação as “Chaves - { }”. Eles definem a dimensão de um bloco. Quando temos apenas uma linha de comanda a ser executada ( printf(“Você já pode votar”); ), não é necessário colocar as chaves, por que o compilador do programa entende que será apenas uma linha. Mas se temos mais de uma linha de comando, somos obrigados a colocar as chaves, deste modo serão executadas todas as linhas de comando que estiverem dentro das chaves. Veja o algoritmo anterior alterado. #include <stdio.h> #include <stdlib.h> void main() { int x = 0; printf( "Informe sua idade: " ); scanf_s( "%d", &x ); if (x > 15) printf( "Você já pode votar\n" ); else printf( "Você não tem idade para participar das eleições\n" ); printf( "Obrigado\n" ); system( "pause" ); } NÃO SIM SIM Início Informe sua idade Ler idade Se idade > 15 Você já pode votar Obrigado Fim Você não tem idade para participar das eleições Prof. MSc Orlei José Pombeiro 6 #include <stdio.h> #include <stdlib.h> void main() { int x=0; printf( "Informe sua idade: " ); scanf_s( "%d", &x ); if (x > 15){ printf( "Você já pode votar\n" ); printf( "Caso ainda não possua título procure o TRE.\n" ); }else{ printf( "Você não tem idade para participar das eleições.\n" ); } printf( "Obrigado\n" ); system( "pause" ); } Temos também o chamado “if Aninhados”, onde utilizamos uma sequência de estruturas de decisão para chegar a uma ou ‘N’ conclusões de uma tarefa. Acompanhe o algoritmo a seguir. Após informar a idade, o algoritmo verifica se usuário tem mais de 15 anos, neste caso ele já pode votar e o algoritmo continua. Se a idade também for maior que 18, informar que além de votar ele também pode ser votado, na sequencia verifica se é um usuário que está liberado da obrigatoriedade da votação por já ter mais de 64 anos. Ou seja, podemos ter dentro de estruturas, outras estruturas, tantas quanto forem necessárias. Para este exemplo utilizamos uma única variável “X”, como comparativo, mas é possível utilizar qualquer comparativo nos “if”. Prof. MSc Orlei José Pombeiro 7 NÃO SIM SIM NÃO SIM SIM NÃO SIM SIM NÃO SIM SIM Início Informe sua idade e se vai votar nas próximas eleições Ler idade Ler opção Se idade > 15 Você Já pode votar Obrigado Fim Você não tem idade para participar das eleições Se Opção = ‘S’ idade > 15 Se idade > 18 Você já pode ser candidato nas eleições Se idade > 64 Você esta liberado da obrigatoriedade de votar Prof. MSc Orlei José Pombeiro 8 #include <stdio.h> #include <stdlib.h> void main() { int x = 0; char op = ' ', c=' '; printf( "Informe sua idade: " ); scanf_s( "%d", &x ); //sempre que usar o scanf/scanf_s mais de uma vez limpe o buffer de teclado while ((c = getchar()) != '\n' && c != EOF) {} printf( "Digite s se for votar nas próximas eleições\n ou qualquer outro caractere para não votar:" ); scanf_s( "%c", &op ); while ((c = getchar()) != '\n' && c != EOF) {} if ((op == 's') || (op == 'S')){ if (x > 15){ printf( "Você já pode votar" ); if( x >= 18 ){ printf( "Você já pode ser candidato nas eleições.\n" ); if( x > 64 ) { printf( "Você está liberado da obrigatoriedade de votar.\n" ); } } } else { printf( "Você não tem idade para participar das eleições.\n" );} } printf( "Obrigado\n" ); system( "pause" ); } Prof. MSc Orlei José Pombeiro 9 Tema 2 - Switch Outra estrutura de decisão é o “switch”. Similar ao “if Aninhado”, mas com a diferença que todas as comparações devem ser realizadas sob a ótica de uma única variável. Veja a estrutura do switch. ESCOLHA (Valor Informado ) { CASO SEJA “Verde”: Execute tarefa A; CASO SEJA “Amarelo”: Execute tarefa B; CASO SEJA “Azul”: Execute tarefa C; CASO SEJA “Branco”: Execute tarefa D; } switch ( cor ) { CASE “Verde”: Execute tarefa A; break; CASE “Amarelo”: Execute tarefa B; break; CASE “Azul”: Execute tarefa C; break; CASE “Branco”: Execute tarefa D; break; } Para o caso de uma possível eleição de condomínio fictício com 5 candidatos. Veja como ficaria o algoritmo de votação utilizando as duas estruturas “if” e “switch”. Exemplo utilizando “if” #include <stdio.h> #include <stdlib.h> void main() { int x = 0; printf( "Informe o número de seu candidato: " ); scanf_s( "%d", &x ); if (x == 1) { printf( "Seu voto foi computado para: Zé Carioca\n" ); } else if( x == 2 ){ printf( "Seu voto foi computado para: Ciclano Albuquerque\n" ); } else if( x == 3 ){ printf( "Seu voto foi computado para: Fulano e silva\n" ); } else if( x == 4 ){ printf( "Seu voto foi computado para: José Colmeia\n" ); } else if( x == 5 ){ printf( "Seu voto foi computado para: Seu Manoel do 505\n" ); } else{ printf( "Voto inválido\n" ); } system( "pause" ); } Prof. MSc Orlei José Pombeiro 10 Exemplo utilizando “switch” O algoritmo a seguir tem o mesmo resultado do anterior, com a diferença que está sendo utilizado o comando “switch” ou invés do “if”. Para o caso do “if”, para cada possível situação deve haver uma comparação, na utilização do “switch”, a variável de comparação é colocada em referência uma única vez, e seus possíveis valores são analisados pelos chamados “case”. Serão executados os comandos referentes ao respectivo valor apontado em um dos cases. Caso não haja nenhuma ocorrência, serão executados os comandos que estiverem no “default”, para o exemplo a seguir, significa que será executado o comando que está no default, caso o valor digitado esteja a baixo de 1 ou acima de 5. Assim como o “else” é opcional no “if”, o “dafault” é opcional no “switch”. #include <stdio.h> #include <stdlib.h> void main() { int x = 0 ; printf( "Informe o número de seu candidato: " ); scanf_s( "%d", &x ); switch (x) { case 1: printf( "Seu voto foi computado para: Zé Carioca\n" ); break; case 2: printf( "Seu voto foi computado para: Ciclano Albuquerque\n"); break; case 3: printf( "Seu voto foi computado para: Fulano e silva\n" ); break; case 4: printf( "Seu voto foi computado para: José Colmeia\n" ); break; case 5: printf( "Seu voto foi computado para: Seu Manoel do 505\n" ); break; default: printf( "Voto inválido\n" ); break; } system( "pause" ); } Prof. MSc Orlei José Pombeiro 11 Tema 3 - While A estrutura “while” (em português: Enquanto), vai ficar executando uma determinada tarefa enquanto a condição for verdadeira. Deste modo, o número de vezes que as tarefas serão executadas, será determinada pelo momento da alteração da condição lógica. Duas considerações importantes sobre esta estrutura. Primeiro, os comandos internos ao “while”, somente vão ser executados se a Condição Lógica for verdadeira, ou seja, se a execução do programa chegar a esta linha e a condição for Falsa, os comandos não serão executados nenhuma vez. Segundo, dentro da estrutura while, deve haver um meio de alterar a condição Lógica da continuação do loop, pois se não houver vai ocorrer o que chamamos de Loop Infinito, ou seja, não vai acabar nunca. Veja a estrutura: qtd = 0; Enquanto ( Condição Lógica é Verdadeira ) while ( qtd < 10 ) { Execute tarefa A; { a += 3; Execute tarefa B; b = b * a; Ecexute tarefa C; qtd++; } } Tema 4 - For Diferentemente da estrutura while, a estrutura de repetição “for” (em português: Para), já possui em sua linha de sintaxe os comandos necessários para a sua execução, ou seja, inicialização, condição de fim e incremento. Por este motivo é a mais utilizada. É dada a preferência na utilização da estrutura for quando já temos definido o número de vezes que as tarefas deverão ser repetidas. Na linha de declaração do “for”, a variável ‘qtd’ é inicializada com o valor ‘0’ (qtd=0), a cada loop ela é incrementada de uma unidade (qtd++) e é verificada a sua condição de finalização (qtd < 10). Este loop ocorrerá 10 vezes. Para qtd de 0 até 9 faça for (qtd=0; qtd < 10; qtd++) { Execute tarefa A; { a += 3; Execute tarefa B; b = b * a; Execute tarefa C; } } Prof. MSc Orlei José Pombeiro 12 Tema 5 - Do while A estrutura “do while”, é similar a estrutura “while”, com uma diferença: no while o loop pode ou não ocorrer devido a condição inicial, já no do while, os comandos serão executados pelo menos uma vez, pois a condição de finalização está no final do loop e não no início como no while. Outra questão é que no while o loop fica executando “enquanto condição for verdadeira”, já no do while o loop fica executando “até que a condição seja verdadeira”. qtd = 0; repita do { Execute tarefa A; { a += 3; Execute tarefa B; b = b * a; Execute tarefa C; qtd++; } } while( qtd > 10); Até ( Condição Lógica ser Verdadeira ) Vamos colocar a seguinte situação: imprimir na tela a tabuada do 7. Não SIM Início Escreva 7 x aux Fim aux recebe 1 Se aux < 11 aux recebe aux + 1 Prof. MSc Orlei José Pombeiro 13 Exemplo utilizando while Exemplo utilizando for Exemplo utilizando do while #include <stdio.h> #include <stdlib.h> void main() { int x = 0; x = 1; while (x < 11) { printf( "7 x %d = %d \n", x, 7 * x ); x++; } printf( "\n" ); system( "pause" ); } #include <stdio.h> #include <stdlib.h> void main() { int x; for (x = 1; x < 11; x++) printf( " 7 x %d = %d \n", x, 7 * x ); printf( "\n" ); system( "pause" ); } #include <stdio.h> #include <stdlib.h> void main() { int x; x = 1; do { printf( "7 x %d = %d \n", x, 7 * x ); x++; } while (x <= 10); printf( "\n" ); system( "pause" ); } Prof. MSc Orlei José Pombeiro 14 Aplicação Criar um algoritmo que realize um cálculo matemático básico de uma das 4 operações possíveis: soma, subtração, divisão ou multiplicação. Solicitar ao usuário que informar o primeiro número, em seguida o operador e por último o segundo número (Ex.: 4 + 7). O algoritmo deverá fornecer o resultado final. O usuário poderá fazer quantas operações matemáticas desejar. SIM Não Não SIM Início Escreva Num1 + num2 Fim Ler: num1, op, num2 Se operador = ‘+’ Informe o 1º número, o operador e o 2º número Não SIM Se operador = ‘-’ Não SIM Se operador = ‘*’ Não SIM Se operador = ‘/’ Escreva Num1 / num2 Escreva Num1 * num2 Escreva Num1 - num2Realizar outra operação? Prof. MSc Orlei José Pombeiro 15 Síntese Nesta aula vimos a importância das estruturas de decisão e estruturas de repetição, assim como a aplicabilidade destes nos algoritmos. Todos os sistemas computacionais em um dado momento vão utilizar uma estrutura de decisão e/ou repetição, seja uma estrutura simples ou composta, o fato é que somente podemos mudar o rumo de fluxo de trabalho em um programa se utilizamos uma destas estruturas. Prof. MSc Orlei José Pombeiro 16 Referências Livros o MIZRAHI, Victorine Viviane; Treinamento em Linguagem C: módulo 1 e 2, Ed. Person Education do Brasil, São Paulo, 1990. o SCHILDT, Herbert; C Completo e Total, Ed. Person Education do Brasil, São Paulo, 1997. o HOLZNER, Steven; C++ Black Book, Makron Books, São paulo, 2002. o TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe J.; Estruturas de Dados Usando C, Ed. Person Education do Brasil, São Paulo. Ebooks o DEITEL, C How to Program; Ed. Person Education do Brasil, 2012. http://www.pearson.com.br/servicos.asp?pag_id=82&area_pai=59&id_p=3 o GADDIS; Starting Out with C++: Pearson New International E:From Control Structures through Objects, Brief Edition-EB, Ed. Person Education do Brasil, 2013, http://www.pearson.com.br/servicos.asp?pag_id=82&area_pai=59&id_p=3 o GADDIS; Starting Out with C++: From Control Structures thr:International Edition-EB, Ed. Person Education do Brasil, 2011, http://www.pearson.com.br/servicos.asp?pag_id=82&area_pai=59&id_p=3 Sites o http://www.cprogressivo.net/2013/10/Estrutura-de-dados-dinamica-em-C-Listas-Filas- Pilhas-Arvores.html o http://www.cin.ufpe.br/~garme/public/(ebook)Estruturas%20de%20Dados%20Usand o%20C%20(Tenenbaum).pdf o http://www.mlaureano.org/livro/livro_estrutura_conta.pdf o https://www.youtube.com/watch?v=Symvpn9J3FM o http://www.inf.puc-rio.br/~inf1620/material.html o https://programacaodescomplicada.wordpress.com/indice/linguagem-c/
Compartilhar