• Nenhum resultado encontrado

Estrutura de Dados e

N/A
N/A
Protected

Academic year: 2022

Share "Estrutura de Dados e"

Copied!
105
0
0

Texto

(1)

Estrutura de Dados e Algoritmos I

Capítulo 2. Modularização

Márcio Palheta, M.Sc.

marcio.palheta@gmail.com

(2)

O instrutor

Desenvolve SW desde 2000

Mestre em BD-RI pela UFAM 2013

Especialista Aplicações Web pela FUCAPI 2008

marcio.palheta@gmail.com

Site das disciplinas:

https://sites.google.com/sit

e/marciopalheta/ Professor e Arquiteto de Software

MARCIO PALHETA

(3)

Plano de aula do 1º Bimestre

Funções e procedimentos (18/07)

Vetores (23, 25, 30/07, 01, 06 e 08/08)

Lista 01 – [AV1] (13 e 15/08)

Matrizes (20, 22, 27 e 29/08)

Recursividade e Strings (03, 10 e 12/09)

Lista 02 [AV2] (17 e 19/09)

Avaliação Bimestral [AVB1] (24 e 26/09) Trabalho Prático [TP1] (01 e 03/10)

(4)

Plano de aula do 2º Bimestre

Registros e ponteiros(08 e 10/10)

Alocação dinâmica(15, 17 e 22/10)

Lista03 - AV3 (29 e 31/10)

Arquivos(05, 07, 12 e 14/11)

Lista04 - AV4 (19 e 21/11)

Trabalho Prático TP2 (26 e 28/11)

Avaliação Bimestral AVB2 (03 e 05/12)

(5)

O problema da soma de 3 números

Imagine um cenário onde você precisa pedir do usuário 3 números quaisquer e devolver a soma deles.

Por onde começar?

Que tal escolher a estratégia?

Como seria nosso algoritmo?

(6)

A soma de três números:

Algoritmo

Declare a, b, c, soma

Leia a

Leia b

Leia c

soma = a + b + c

Imprima soma

DECLARAÇÃO das variáveis

(7)

A soma de três números:

Algoritmo

Declare a, b, c, soma

Leia a

Leia b

Leia c

soma = a + b + c

Imprima soma

LEITURA das variáveis

(8)

A soma de três números:

Algoritmo

Declare a, b, c, soma

Leia a

Leia b

Leia c

soma = a + b + c

Imprima soma

SOMA das variáveis

(9)

A soma de três números:

Algoritmo

Declare a, b, c, soma

Leia a

Leia b

Leia c

soma = a + b + c

Imprima soma

IMRESSÃO do resultado

(10)

Transformando algoritmo em código-fonte

Uma vez definido o passo-a-passo para resolver um problema, vem a escolha da linguagem de programação.

A título de exemplo, veremos a

implementação do nosso algoritmo em:

Java, Python e

C / C++ (que é o foco do nosso curso)

(11)

Soma de três números:

Implementação JAVA

DECLARAÇÃO das variáveis

(12)

Soma de três números:

Implementação JAVA

LEITURA das variáveis

(13)

Soma de três números:

Implementação JAVA

SOMA das variáveis

(14)

Soma de três números:

Implementação JAVA

IMPRESSÃO do resultado

(15)

Soma de três números:

Implementação PYTHON

DECLARAÇÃO das variáveis

(16)

Soma de três números:

Implementação PYTHON

LEITURA das variáveis

(17)

Soma de três números:

Implementação PYTHON

SOMA das variáveis

(18)

Soma de três números:

Implementação PYTHON

IMPRESSÃO do resultado

(19)

Soma de três números:

Implementação C / C++

DECLARAÇÃO de variáveis

(20)

Soma de três números:

Implementação C / C++

LEITURA de variáveis

(21)

Soma de três números:

Implementação C / C++

SOMA de variáveis

(22)

Soma de três números:

Implementação C / C++

IMPRESSÃO do resultado

(23)

Percebeu algo interessante?

Haaan...

Huuuum...

(24)

Percebeu algo interessante?

O algoritmo

é igual

(25)

Percebeu algo interessante?

O algoritmo é igual

Executado

linha-a-linha

(26)

Percebeu algo interessante?

O algoritmo é igual

O que muda é a linguagem de

programação

Executado

linha-a-linha

(27)

Exercícios

Implemente o código C/C++ para resolver a soma de três números, conforme slides anteriores.

Resolva o problema da anterior usando apenas as variáveis a e soma.

(28)

Problema do aumento de salário

Imagine que você foi escolhido para

programar a atualização de salários da sua empresa.

Nesse problema, você precisa:

Ler o nome do funcionário;

Ler o salário atual;

Ler o valor a ser acrescentado ao salário;

Imprimir o novo salário

(29)

Problema do aumento de salário

Imagine que você foi escolhido para

programar a atualização de salários da sua empresa.

Nesse problema, você precisa:

Ler o nome do funcionário;

Ler o salário atual;

Ler o valor a ser acrescentado ao salário;

Imprimir o novo salário

Oooopa! O

que é isso?

(30)

Problema do aumento de salário

Imagine que você foi escolhido para

programar a atualização de salários da sua empresa.

Nesse problema, você precisa:

Ler o nome do funcionário;

Ler o salário atual;

Ler o valor a ser acrescentado ao salário;

Imprimir o novo salário

Oooopa! O que é isso?

Isso mesmo,

nosso algoritmo

(31)

Implementação em C / C++

(32)

Implementação em C / C++

DECLARAÇÃO das variáveis

(33)

Implementação em C / C++

LEITURA das variáveis

(34)

Implementação em C / C++

CÁLCULO do novo salário

(35)

Implementação em C / C++

IMPRESSÃO do resultado

(36)

Pensando em organização do código-fonte

E se eu precisar calcular o novo salário em vários

pontos do sistema?

(37)

Pensando em organização do código-fonte

E se eu precisar calcular o novo salário em vários

pontos do sistema?

Tenho que Copiar

e Colar o código?

(38)

Modularização

Que nada!

(39)

Modularização

Que nada!

Você pode usar

sub-rotinas

(40)

Modularização

Que nada!

Você pode usar sub-rotinas

Conhecidas como

Métodos, Funções

(41)

Trabalhando com sub-rotinas

E como isso

funciona?

(42)

Trabalhando com sub-rotinas

Escreva um bloco de

código com o algoritmos

que você quer reutilizar

(43)

Trabalhando com sub-rotinas

Escreva um bloco de

código com o algoritmos que você quer reutilizar

Depois, é só chamar

a sub-rotina, sempre

(44)

Por exemplo

Imagine que você precisa calcular o novo salário duas vezes;

Defina a sub-rotina acima do seu método principal (int main())

Inclua na sub-rotina o algoritmo que você quer reaproveitar;

E chame a sua sub-rotina a partir do método main()

(45)

Trabalhando com sub-rotinas

Você vai ficar muito triste se eu perguntar...

Como assim?

(46)

Tá bom. 1º você precisa saber como declarar uma sub-rotina

A declaração de uma sub-rotina, função ou procedimento tem um padrão:

<tipo> nome_da_funcao(<tipo> arg1,

<tipo> arg2, ..., <tipo> argN){

<algoritmo da subrotina>

return valor_de_retorno;

}

(47)

Tá bom. 1º você precisa saber como declarar uma sub-rotina

A declaração de uma sub-rotina, função ou procedimento tem um padrão:

<tipo> nome_da_funcao(<tipo> arg1,

<tipo> arg2, ..., <tipo> argN){

<algoritmo da subrotina>

return valor_de_retorno;

}

Aqui vem o Tipo de Retorno da sub-rotina.

void, int, char, float etc

(48)

Tá bom. 1º você precisa saber como declarar uma sub-rotina

A declaração de uma sub-rotina, função ou procedimento tem um padrão:

<tipo> nome_da_funcao(<tipo> arg1,

<tipo> arg2, ..., <tipo> argN){

<algoritmo da subrotina>

return valor_de_retorno;

}

Aqui vem o Tipo de Retorno da sub-rotina.

void, int, char, float etc

Se tipo de retorno

void = Procedimento

qualquer outro = Função

(49)

Tá bom. 1º você precisa saber como declarar uma sub-rotina

A declaração de uma sub-rotina, função ou procedimento tem um padrão:

<tipo> nome_da_funcao(<tipo> arg1,

<tipo> arg2, ..., <tipo> argN){

<algoritmo da subrotina>

return valor_de_retorno;

}

Aqui vem o NOME

da sub-rotina.

(50)

A declaração de uma sub-rotina, função ou procedimento tem um padrão:

<tipo> nome_da_funcao(<tipo> arg1,

<tipo> arg2, ..., <tipo> argN){

<algoritmo da subrotina>

return valor_de_retorno;

}

Tá bom. 1º você precisa saber como declarar uma sub-rotina

Aqui vem o LISTA DE

PARÂMETROS da sub-rotina.

(51)

A declaração de uma sub-rotina, função ou procedimento tem um padrão:

<tipo> nome_da_funcao(<tipo> arg1,

<tipo> arg2, ..., <tipo> argN){

<algoritmo da subrotina>

return valor_de_retorno;

}

Tá bom. 1º você precisa saber como declarar uma sub-rotina

Aqui vem o CORPO

da sub-rotina.

(52)

A declaração de uma sub-rotina, função ou procedimento tem um padrão:

<tipo> nome_da_funcao(<tipo> arg1,

<tipo> arg2, ..., <tipo> argN){

<algoritmo da subrotina>

return valor_de_retorno;

}

Tá bom. 1º você precisa saber como declarar uma sub-rotina

Por último, você

retorna o RESULTADO

da sub-rotina...

(53)

A declaração de uma sub-rotina, função ou procedimento tem um padrão:

<tipo> nome_da_funcao(<tipo> arg1,

<tipo> arg2, ..., <tipo> argN){

<algoritmo da subrotina>

return valor_de_retorno;

}

Tá bom. 1º você precisa saber como declarar uma sub-rotina

Por último, você

retorna o RESULTADO da sub-rotina...

... mas só se for

uma função

(54)

Por exemplo, veja a função

para cálculo do aumento

(55)

Por exemplo, veja a função para cálculo do aumento

Tipo de retorno

da função.

(56)

Por exemplo, veja a função para cálculo do aumento

Nome da função.

(57)

Por exemplo, veja a função para cálculo do aumento

A Lista de parâmetros

da função está vazia.

(58)

Por exemplo, veja a função para cálculo do aumento

Corpo da função.

(59)

Por exemplo, veja a função para cálculo do aumento

Retorno da função.

(60)

Trabalhando com sub-rotinas

Sei, mas... Como

chamo a sub-rotina?

(61)

Trabalhando com sub-rotinas

Fácil fácil...

Você informa o nome da

sub-rotina...

(62)

Trabalhando com sub-rotinas

Fácil fácil...

Você informa o nome da sub-rotina...

... e sua lista de

parâmetros

(63)

Trabalhando com sub-rotinas

Olha só a continuação do

código anterior...

(64)

Trabalhando com sub-rotinas

Olha só a continuação do

código anterior...

(65)

Trabalhando com sub-rotinas

O resultado da função

calcularAumento()...

(66)

Trabalhando com sub-rotinas

O resultado da função calcularAumento()...

...é guardado na

variável salario

(67)

Trabalhando com sub-rotinas

Agora, você pode imprimir o conteúdo

da variável salario

(68)

Trabalhando com sub-rotinas

Que tal, é

difícil?

(69)

Trabalhando com sub-rotinas

Que tal, é difícil?

É naaaada.

(70)

Trabalhando com sub-rotinas

Huuuuum

Outra coisa...

(71)

Trabalhando com sub-rotinas

Huuuuum Outra coisa...

Como fica a

memória, durante a execução das sub-

rotinas?

(72)

Trabalhando com sub-rotinas

Bom... a execução

ocorre linha-a-linha

(73)

Trabalhando com sub-rotinas

Bom... a execução

ocorre linha-a-linha

(74)

Trabalhando com sub-rotinas

Bom... a execução

ocorre linha-a-linha

(75)

Trabalhando com sub-rotinas

Bom... a execução

ocorre linha-a-linha

(76)

A pilha de execução

Os métodos são empilhados na

memória

main()

Pilha de execução

(77)

A pilha de execução

Os métodos são empilhados na

memória

main()

Pilha de execução

(78)

A pilha de execução

main()

Pilha de execução

Quando um novo método é

encontrado...

(79)

A pilha de execução

main()

calculaAumento() Pilha de execução

... é incluído na pilha

de execução...

(80)

A pilha de execução

main()

calculaAumento() Pilha de execução

... a execução do método atual é

parada...

(81)

A pilha de execução

main()

calculaAumento() Pilha de execução

... e é iniciada a execução do novo

método...

(82)

A pilha de execução

main()

calculaAumento() Pilha de execução

... que também ocorre de forma

linear

(83)

A pilha de execução

main()

calculaAumento() Pilha de execução

printf()

(84)

A pilha de execução

main()

calculaAumento() Pilha de execução

printf()

Exclusão após a execução

X

(85)

A pilha de execução

main()

calculaAumento() Pilha de execução

Exclusão após

a execução

(86)

A pilha de execução

main()

calculaAumento() Pilha de execução

scanf()

(87)

A pilha de execução

main()

calculaAumento() Pilha de execução

printf()

(88)

A pilha de execução

main()

calculaAumento() Pilha de execução

scanf()

(89)

A pilha de execução

main()

calculaAumento() Pilha de execução

(90)

A pilha de execução

main()

calculaAumento() Pilha de execução

(91)

A pilha de execução

main()

calculaAumento() Pilha de execução

Exclusão após a execução

X

(92)

A pilha de execução

main() printf()

Pilha de execução

(93)

Trabalhando com sub-rotinas

main()

Pilha de execução

(94)

Pilha vazia

Pilha de execução

FIM da execução

do programa

(95)

É simples

assim ?

(96)

É simples assim ?

Úúúuuuuhhhh

SHOW!

(97)

É simples assim ?

Úúúuuuuhhhh SHOW!

Já é...

(98)

Então vumbora

praticar ...

(99)

Exercício de sub-rotinas

Responda usando C / C++

1. Escreva uma função que receba cinco

números inteiros e devolva o maior deles

2. Escreva um procedimento que peça dois

números do usuário e imprima seu produto

3. Escreva uma função que receba cinco valores de salários e devolva sua média

4. Faça um procedimento que receba um

inteiro N (nro de horas), calcule e imprime a conversão de N em minutos e segundos. 99

(100)

Exercício de sub-rotinas

Responda usando C / C++

5. Escreva uma função que receba as três

notas de um aluno e calcule e devolva sua média ponderada, considerando os pesos 2, 4 e 6, respectivamente.

6. Escreva um procedimento que imprima os próximos cinco números da progressão

aritmética (2, 7, 12, ....)

(101)

Exercício de sub-rotinas

Responda usando C / C++

7. Escrever uma função que receba um escalar X e devolva o seu fatorial.

8. Escreva um procedimento que imprima a série de Fibonacci até o N-ésimo elemento, onde N é recebido como parâmetro (1, 1, 2, 3, 5, 8, 13, 21...)

9. Crie uma função que receba a e b e devolva “𝑏𝑎”, sem usar operadores de

(102)

Exercício de sub-rotinas

Responda usando C / C++

10. Escrever uma função que receba X e Y e devolva o MDC entre eles.

11. Escreva uma função que receba um escalar X e devolva 1 se X for PAR e 0 do contrário

12. Escreva uma função que receba um escalar Y e devolva 1 se Y for PRIMO e 0 do

contrário

(103)

Bibliografia

ASSENCIO, Ana Fernandes Gomes. Fundamentos da

programação de computadores, 3ª edição, Pearson, 2012.

ASSENCIO, Ana Fernandes

Gomes. Estruturas de Dados, Pearson, 2010.

(104)

Referências

ASSENCIO, Ana Fernandes Gomes.

Fundamentos da programação de

computadores, 3ª edição, Pearson, 2012.

ASSENCIO, Ana Fernandes Gomes.

Estruturas de Dados, Pearson, 2010.

FORBELONE, André. Lógica de Programação.

Editora Makron Books, 2000

Projetos Pedagógicos dos Cursos de SIS, CCP e ECP;

(105)

Estrutura de Dados e Algoritmos I

Capítulo 2. Modularização

Márcio Palheta, M.Sc.

marcio.palheta@gmail.com

Referências

Documentos relacionados

Mestrado em Administração e Gestão Pública, começo por fazer uma breve apresentação histórica do surgimento de estruturas da Administração Central com competências em matéria

Para discutir a temática, iniciaremos nossa incursão teórica a partir da concepção de religião implícita em DURKHEIM (1996), mais especificamente sobre a religião como

As análises serão aplicadas em chapas de aços de alta resistência (22MnB5) de 1 mm de espessura e não esperados são a realização de um mapeamento do processo

No processo da produção da tinta, foi utilizado o pó de carbono (pó de grafite), que apresenta baixo custo e facilidade de se encontrar no mercado, e um verniz

Os instrumentos de pesquisa utilizados serão: Ficha de Rastreamento das Participantes do Estudo, International Consultation on Incontinence Questionnaire – Short Form

A baixa taxa de desconto ao longo dos anos de produção do campo, para o cálculo da função objetivo, aliada a baixa produção de água que a locação de

O objetivo deste estudo foi avaliar o comporta- mento clínico de lesões de dermatite digital bovina após tratamento cirúrgico, uso local e parenteral de oxitetraci- clina e passagem

Changes in the gut microbiota appears to be a key element in the pathogenesis of hepatic and gastrointestinal disorders, including non-alcoholic fatty liver disease, alcoholic