algoritmos e estruturas de dados prof. me. claudio benossi [email protected] linguagem c -...
TRANSCRIPT
Algoritmos e Estruturas de Dados
Prof. Me. Claudio [email protected]
Linguagem CLinguagem C- Estruturas de Controle -- Estruturas de Controle -
Estruturas Condicionais ou de SeleçãoEstruturas Condicionais ou de Seleção
SimplesSimples
CompostaComposta
Múltipla escolhaMúltipla escolha
Estruturas de RepetiçãoEstruturas de Repetição
Por condição no inícioPor condição no início
Por condição no fimPor condição no fim
Por contagemPor contagem
Estruturas de ControleEstruturas de ControleEstruturas de ControleEstruturas de Controle
Realizam a execução de um conjunto de Realizam a execução de um conjunto de comandos de acordo com o comandos de acordo com o valor de uma valor de uma expressãoexpressão..
Servem para Servem para alterar o fluxoalterar o fluxo de execução de um de execução de um programa baseado no valor, verdadeiro ou falso, programa baseado no valor, verdadeiro ou falso, de uma expressão lógica.de uma expressão lógica.
Estrutura Condicional ou de SeleçãoEstrutura Condicional ou de SeleçãoEstrutura Condicional ou de SeleçãoEstrutura Condicional ou de Seleção
if if (<expressão>)(<expressão>){{ <comandos><comandos>}}
if if (<expressão>)(<expressão>){{ <comandos><comandos>}}
20
Estrutura Condicional SimplesEstrutura Condicional Simples:: Comando :: Comando ififEstrutura Condicional SimplesEstrutura Condicional Simples:: Comando :: Comando ifif
Na linguagem C, a estrutura Na linguagem C, a estrutura condicional condicional simplessimples possui a seguinte sintaxe: possui a seguinte sintaxe:
if if (<expressão>) (<expressão>) {{
<comandos><comandos>}}elseelse
{{<comandos><comandos>
}}
if if (<expressão>) (<expressão>) {{
<comandos><comandos>}}elseelse
{{<comandos><comandos>
}}
21
Estrutura Condicional CompostaEstrutura Condicional Composta:: Comando :: Comando if-elseif-elseEstrutura Condicional CompostaEstrutura Condicional Composta:: Comando :: Comando if-elseif-else
Na linguagem C, a estrutura Na linguagem C, a estrutura condicional condicional compostacomposta possui a seguinte sintaxe: possui a seguinte sintaxe:
if (<expressão>) {
if (<expressão>) {
<comandos1>}else{
<comandos2>}
}else {
if (<expressão>) {
<comandos3>}else{
<comandos4>}
}
if (<expressão>) {
if (<expressão>) {
<comandos1>}else{
<comandos2>}
}else {
if (<expressão>) {
<comandos3>}else{
<comandos4>}
} 2322
Estrutura Condicional CompostaEstrutura Condicional Composta:: Comando :: Comando if-elseif-elseEstrutura Condicional CompostaEstrutura Condicional Composta:: Comando :: Comando if-elseif-else
Quando temos estruturas condicionais presentes Quando temos estruturas condicionais presentes em blocos de comandos de outras estruturas em blocos de comandos de outras estruturas condicionais, chamamos de estruturas condicionais, chamamos de estruturas aninhadasaninhadas ou ou encadeadasencadeadas::
x = 2;if (x < 2)
if (x >= -3) printf("\n x está entre [-3;1]");
else printf("x é maior que 1");
x = 2;if (x < 2)
if (x >= -3) printf("\n x está entre [-3;1]");
else printf("x é maior que 1");
24
x = 2;if (x < 2){
if (x >= -3) printf("\n x está entre [-3;1]");
}else printf("x é maior que 1");
x = 2;if (x < 2){
if (x >= -3) printf("\n x está entre [-3;1]");
}else printf("x é maior que 1");
Estrutura Condicional CompostaEstrutura Condicional Composta:: Comando :: Comando if-elseif-elseEstrutura Condicional CompostaEstrutura Condicional Composta:: Comando :: Comando if-elseif-else
Ambigüidade:Ambigüidade: na falta de chaves, a linguagem C na falta de chaves, a linguagem C associa o associa o elseelse sempre ao último sempre ao último ifif..
Portanto, para que a construção funcione como Portanto, para que a construção funcione como desejado, pode-se resolver o problema usando desejado, pode-se resolver o problema usando bloco.bloco.
O operador ternário O operador ternário ?? possui a seguinte sintaxe: possui a seguinte sintaxe:
Exp1Exp1 é avaliada: é avaliada:
Se for Se for verdadeiraverdadeira, , Exp2Exp2 é avaliada se torna o seu valor é avaliada se torna o seu valor da instrução.da instrução.
Se for Se for falsafalsa, , Exp3Exp3 é avaliada se torna o seu valor da é avaliada se torna o seu valor da instrução.instrução.
Exp1Exp1 ? ? Exp2Exp2 : : Exp3;Exp3;Exp1Exp1 ? ? Exp2Exp2 : : Exp3;Exp3;
25
Operador Condicional: Operador Condicional: ??Operador Condicional: Operador Condicional: ??
Operador Condicional: Operador Condicional: ??Operador Condicional: Operador Condicional: ??
Equivale ao seguinte código Equivale ao seguinte código if-elseif-else::
26
if if (Exp1)(Exp1)
Exp2;Exp2;
elseelse
Exp3;Exp3;
if if (Exp1)(Exp1)
Exp2;Exp2;
elseelse
Exp3;Exp3;
Exp1Exp1 ? ? Exp2Exp2 : : Exp3;Exp3;Exp1Exp1 ? ? Exp2Exp2 : : Exp3;Exp3;
ex01
Considere um par de valores Considere um par de valores (x, y)(x, y)
Eles representam as coordenadas de um Eles representam as coordenadas de um ponto no planoponto no plano
Determinar:Determinar: o quadrante ao qual pertence o ponto, ouo quadrante ao qual pertence o ponto, ou
se está sobre um dos eixos cartesianosse está sobre um dos eixos cartesianos
ExercícioExercícioExercícioExercício
switchswitch (<expressão_ou_valor>) (<expressão_ou_valor>) {{ casecase Constante1: Constante1: <comandos1><comandos1> breakbreak;; casecase Constante2: Constante2: <comandos2><comandos2> breakbreak;; ...... defaultdefault:: <comandosN><comandosN>}}
switchswitch (<expressão_ou_valor>) (<expressão_ou_valor>) {{ casecase Constante1: Constante1: <comandos1><comandos1> breakbreak;; casecase Constante2: Constante2: <comandos2><comandos2> breakbreak;; ...... defaultdefault:: <comandosN><comandosN>}}
Estrutura Condicional de Múltipla EscolhaEstrutura Condicional de Múltipla Escolha:: Comando :: Comando switch-caseswitch-caseEstrutura Condicional de Múltipla EscolhaEstrutura Condicional de Múltipla Escolha:: Comando :: Comando switch-caseswitch-case
Instrução de seleção de múltipla escolha Instrução de seleção de múltipla escolha CASECASE na linguagem C: na linguagem C:
27.127
Estrutura Condicional de Múltipla EscolhaEstrutura Condicional de Múltipla Escolha:: Comando :: Comando switch-caseswitch-caseEstrutura Condicional de Múltipla EscolhaEstrutura Condicional de Múltipla Escolha:: Comando :: Comando switch-caseswitch-case
Funcionamento do comandoFuncionamento do comando switchswitch::
Analisa a Analisa a expressãoexpressão ou ou valorvalor..
Caso seja igual a Caso seja igual a Constante1Constante1, então executa , então executa ““comandos1comandos1” e vai para o final do ” e vai para o final do switchswitch..
Caso seja Caso seja Constante2Constante2, então executa , então executa ““comandos2comandos2” e vai para o final do ” e vai para o final do switchswitch..
Assim sucessivamente...Assim sucessivamente...
Caso não seja nenhuma das alternativas, vai Caso não seja nenhuma das alternativas, vai para o para o defaultdefault,, executa “ executa “comandosNcomandosN” e ” e encerra o encerra o switchswitch..
28
Estrutura Condicional de Múltipla EscolhaEstrutura Condicional de Múltipla Escolha:: Comando :: Comando switch-caseswitch-caseEstrutura Condicional de Múltipla EscolhaEstrutura Condicional de Múltipla Escolha:: Comando :: Comando switch-caseswitch-case
O parâmetro do O parâmetro do switchswitch deve ser deve ser intint ou ou charchar..
O valor após o O valor após o casecase dever ser uma dever ser uma constanteconstante (não pode ser uma variável).(não pode ser uma variável).
Instrução Instrução breakbreak:: Faz com que aconteça a Faz com que aconteça a saída imediatasaída imediata daquela daquela
estrutura (no caso, o estrutura (no caso, o comando comando switchswitch).). A execução do programa continua com a primeira A execução do programa continua com a primeira
instrução depois da estrutura.instrução depois da estrutura. Sua ausência faz o controle passar ao próximo Sua ausência faz o controle passar ao próximo casecase, o , o
que não é desejadoque não é desejado..
ex02
ExercícioExercícioExercícioExercício
Os funcionários de uma empresa Os funcionários de uma empresa receberam um aumento de salário:receberam um aumento de salário: Técnicos: 50%Técnicos: 50%
Gerentes: 30%Gerentes: 30%
Demais: 20%Demais: 20%
Escrever um programa que receba como Escrever um programa que receba como entrada o salário atual e o cargo do entrada o salário atual e o cargo do funcionário, e apresente o novo salário funcionário, e apresente o novo salário após o aumento.após o aumento.
whilewhile (<condição>) (<condição>){{ <comandos_a_repetir><comandos_a_repetir>}}<comandos_após_laço_while><comandos_após_laço_while>
whilewhile (<condição>) (<condição>){{ <comandos_a_repetir><comandos_a_repetir>}}<comandos_após_laço_while><comandos_após_laço_while>
Repetição por condição no inícioRepetição por condição no início:: Comando :: Comando whilewhileRepetição por condição no inícioRepetição por condição no início:: Comando :: Comando whilewhile
Permite que um certo trecho de programa Permite que um certo trecho de programa seja executado seja executado ENQUANTOENQUANTO uma certa uma certa condição for verdadeira.condição for verdadeira.
Funcionamento:Funcionamento:
1.1.Testar a condição.Testar a condição.
2.2.Se a condição for Se a condição for falsafalsa, então sair do laço., então sair do laço.
3.3.Se a condição for Se a condição for verdadeiraverdadeira, então executar , então executar cada um dos comandos do interior do laço.cada um dos comandos do interior do laço.
4.4.Após executar o último comando do laço Após executar o último comando do laço whilewhile, voltar ao passo , voltar ao passo 11..
Repetição por condição no inícioRepetição por condição no início:: Comando :: Comando whilewhileRepetição por condição no inícioRepetição por condição no início:: Comando :: Comando whilewhile
O O whilewhile deve ser usado sempre que: deve ser usado sempre que: Não soubermos exatamente quantas vezes o Não soubermos exatamente quantas vezes o
laço deve ser repetidolaço deve ser repetido O teste deva ser feito antes de iniciar a O teste deva ser feito antes de iniciar a
execução de um bloco de comandosexecução de um bloco de comandos Houver casos em que o laço não deva ser Houver casos em que o laço não deva ser
repetido nenhuma vez antes do teste da repetido nenhuma vez antes do teste da condiçãocondição
Atenção:Atenção: As variáveis usadas no teste devem ser As variáveis usadas no teste devem ser
inicializadasinicializadas antes do teste. antes do teste.
29
Repetição por condição no inícioRepetição por condição no início:: Comando :: Comando whilewhileRepetição por condição no inícioRepetição por condição no início:: Comando :: Comando whilewhile
dodo{{
<comandos_a_repetir><comandos_a_repetir>} } whilewhile (<condição>); (<condição>);
<comandos_após_laço_do-while><comandos_após_laço_do-while>
dodo{{
<comandos_a_repetir><comandos_a_repetir>} } whilewhile (<condição>); (<condição>);
<comandos_após_laço_do-while><comandos_após_laço_do-while>
Repetição por condição no fimRepetição por condição no fim:: Comando :: Comando do-whiledo-whileRepetição por condição no fimRepetição por condição no fim:: Comando :: Comando do-whiledo-while
Permite que um certo trecho de programa Permite que um certo trecho de programa seja executado seja executado ATÉ QUEATÉ QUE uma certa uma certa condição deixe de ser verdadeira:condição deixe de ser verdadeira:
Repetição por condição no fimRepetição por condição no fim:: Comando :: Comando do-whiledo-whileRepetição por condição no fimRepetição por condição no fim:: Comando :: Comando do-whiledo-while
Funcionamento:Funcionamento:
1.1.Executar os comando dentro do bloco Executar os comando dentro do bloco do-do-whilewhile..
2.2.Testar a condição.Testar a condição.
3.3.Se a condição for Se a condição for falsafalsa, então sair do laço., então sair do laço.
4.4.Se a condição for Se a condição for verdadeiraverdadeira, então retornar , então retornar para o para o passo 1passo 1..
O comando O comando do-whiledo-while deve ser usado deve ser usado sempre que:sempre que:
Não soubermos exatamenteNão soubermos exatamente quantas vezes o quantas vezes o laço deve ser repetidolaço deve ser repetido
O teste deva ser feito O teste deva ser feito depois da execuçãodepois da execução de de um bloco de comandosum bloco de comandos
O bloco de comandos deve se O bloco de comandos deve se executado pelo executado pelo menos uma vezmenos uma vez
30
Repetição por condição no fimRepetição por condição no fim:: Comando :: Comando do-whiledo-whileRepetição por condição no fimRepetição por condição no fim:: Comando :: Comando do-whiledo-while
Ler um número e verificar se este é ou Ler um número e verificar se este é ou não um número primo.não um número primo.
Dada uma Dada uma dívida de 10 mil reaisdívida de 10 mil reais que que cresce a juros de cresce a juros de 2,5% ao mês2,5% ao mês e uma e uma aplicação de 1.500 reaisaplicação de 1.500 reais com rendimento com rendimento de de 4% ao mês4% ao mês, escrever um algoritmo que , escrever um algoritmo que determine o numero de meses determine o numero de meses necessários para pagar a dívida.necessários para pagar a dívida.
ex03
ex04
ExercíciosExercíciosExercíciosExercícios
forfor (comandos_inic; condição_teste; incre/decremento) (comandos_inic; condição_teste; incre/decremento){{
<comandos_a_repetir><comandos_a_repetir>}}
<comandos_após_laço_for>;<comandos_após_laço_for>;
forfor (comandos_inic; condição_teste; incre/decremento) (comandos_inic; condição_teste; incre/decremento){{
<comandos_a_repetir><comandos_a_repetir>}}
<comandos_após_laço_for>;<comandos_após_laço_for>;
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Permite que um certo trecho de programa Permite que um certo trecho de programa seja executado um seja executado um número determinado número determinado de vezesde vezes..
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Funcionamento:Funcionamento:
1.1.Executar os comandos de inicialização.Executar os comandos de inicialização.
2.2.Testar a condição.Testar a condição.
3.3.Se a condição for Se a condição for falsafalsa então sair do laço então sair do laço forfor..
4.4.Se a condição for Se a condição for verdadeiraverdadeira então executar então executar os comandos que estão subordinados ao os comandos que estão subordinados ao forfor..
5.5.Executar os comandos de Executar os comandos de incremento/decremento.incremento/decremento.
6.6.Voltar ao Voltar ao passo 2passo 2..
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Observações:Observações:
Os comandos de Os comandos de inicializaçãoinicialização são executados são executados apenas uma vezapenas uma vez..
O contador é incrementado/decrementado O contador é incrementado/decrementado sempre ao sempre ao final da execuçãofinal da execução do bloco. do bloco.
O teste é feito sempre O teste é feito sempre antes do inícioantes do início da da execução do bloco de comandos.execução do bloco de comandos.
31
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
O comando O comando forfor deve ser usado sempre deve ser usado sempre que:que:
Soubermos Soubermos exatamente quantas vezesexatamente quantas vezes o laço o laço deve ser repetido.deve ser repetido.
O teste deva ser feito O teste deva ser feito antesantes da execução de da execução de um bloco de comandos.um bloco de comandos.
Houver casos em que o laço Houver casos em que o laço não devanão deva ser ser repetido nenhuma vezrepetido nenhuma vez..
32
forfor ( ; condição_teste; incre/decremento) ( ; condição_teste; incre/decremento)forfor ( ; condição_teste; incre/decremento) ( ; condição_teste; incre/decremento)
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Flexibilidade do comandoFlexibilidade do comando forfor
Se nenhuma inicialização é necessária, Se nenhuma inicialização é necessária, comandos_iniccomandos_inic pode ser omitido. pode ser omitido.
33
forfor (comandos_inic; ; incre/decremento) (comandos_inic; ; incre/decremento)forfor (comandos_inic; ; incre/decremento) (comandos_inic; ; incre/decremento)
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Flexibilidade do comandoFlexibilidade do comando forfor
Se Se condição_testecondição_teste é omitida, o comando é omitida, o comando forfor pode ficar em um laço infinito.pode ficar em um laço infinito.
34
forfor (comandos_inic; condição_teste; ) (comandos_inic; condição_teste; )forfor (comandos_inic; condição_teste; ) (comandos_inic; condição_teste; )
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Flexibilidade do comandoFlexibilidade do comando forfor
Se Se incre/decrementoincre/decremento é omitido, deve-se, é omitido, deve-se, atualizar a variável de laço em um comando atualizar a variável de laço em um comando dentro do laço.dentro do laço.
35
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Flexibilidade do comandoFlexibilidade do comando forfor
Duas ou mais variáveis (separadas por vírgula) Duas ou mais variáveis (separadas por vírgula) podem ser inicializadas e/ou podem ser inicializadas e/ou incre/decrementadas incre/decrementadas ao mesmo tempoao mesmo tempo..
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Comandos Comandos forfor aninhadosaninhados Um comando Um comando forfor pode ser utilizado dentro de pode ser utilizado dentro de
outro comando outro comando forfor..
Cuidados devem ser tomados para não Cuidados devem ser tomados para não aumentar o tempo de execução do algoritmo.aumentar o tempo de execução do algoritmo.
36a 36b 36c
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Arte ASCIIArte ASCII Como imprimir:Como imprimir:
******************** ********** ************************************** ******** **** ******** ******************** ****** *** ****** ***************** **** ** **** ************** ** * ** *********** ** * ** ********* **** ** **** ******** ****** *** ****** ******* ******** **** ******** ****** ********** ********************
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
Cálculo de sériesCálculo de séries
1.1.Determinar o termo geral.Determinar o termo geral.
2.2.Determinar valor inicial do contador.Determinar valor inicial do contador.
3.3.Determinar valor final do contadorDeterminar valor final do contador..
ex06
3333
32,7
1
5
1
3
11 SS
2
2
46
2
48
2
50
2 2532
S ex05
Repetição por contagemRepetição por contagem:: Comando :: Comando forforRepetição por contagemRepetição por contagem:: Comando :: Comando forfor
ExercíciosExercícios
1.1.Calcular o valor de S:Calcular o valor de S:
2.2.Calcular o valor de Calcular o valor de ππ com com precisão de 0,001::
QuestõesQuestõesQuestõesQuestões