SlideShare uma empresa Scribd logo
1 de 202
Baixar para ler offline
ALGORITMOS I &
INICIAÇÃO À PROGRAMAÇÃO
this.GetStarted()
programar não se estuda… pratica-se,
não se aprende… explora-se e investiga-se
Luís Ferreira, João C. Silva, Patrícia Leite, Marta Martinho e Célio Carvalho
2015.nov, v0.9.8
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 2 de 202
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 3 de 202
INDICE
1. INTRODUÇÃO E CONCEITOS BÁSICOS 5
1.1. HARDWARE VS. SOFTWARE 5
1.2. APRESENTAÇÃO DA ALGORITMIA 6
1.3. LINGUAGENS DE PROGRAMAÇÃO 11
1.4. TIPOS DE INSTRUÇÃO (SEQUÊNCIA, DECISÃO E REPETIÇÃO) 16
1.5. TIPOS DE NOTAÇÃO DE ALGORITMOS (PSEUDO-CÓDIGO E FLUXOGRAMA) 17
2. APRESENTAÇÃO DE FERRAMENTAS 21
2.1. VISUALG 2.0 21
2.2. MICROSOFT VISUAL STUDIO 22
2.2.1. TIPOS DE PROJETOS (PRINCIPAIS) 22
2.3. DEV C++ (BLOODSHED) 24
3. ALGORITMOS EM PSEUDO-CÓDIGO 25
3.1. REGRAS, TERMINOLOGIAS E ESTRUTURA DOS ALGORITMOS 25
3.2. CONSTANTES E VARIÁVEIS 27
3.3. TIPOS DE DADOS 32
3.4. OPERADORES MATEMÁTICOS 37
3.5. OPERADORES LÓGICOS E RELACIONAIS 45
3.6. INSTRUÇÕES DE SEQUÊNCIA 50
3.6.1. ATRIBUIÇÃO 50
3.6.2. ENTRADA/SAÍDA DE DADOS (LER E ESCREVER) 52
3.6.3. EXERCÍCIOS (FICHA Nº 1) 58
3.7. INSTRUÇÕES DE DECISÃO 61
3.7.1. SE.. ENTÃO… SENÃO…. 62
3.7.2. SELECIONAR… CASO1… CASO(N)… SENÃO…. 70
3.7.3. EXERCÍCIOS (FICHA Nº 2) 82
3.8. INSTRUÇÕES DE REPETIÇÃO 84
3.8.1. REPETIR… ATÉ 84
3.8.2. ENQUANTO… FAZER 92
3.8.3. PARA… FAZER 100
3.8.4. EXERCICIOS (FICHA Nº 3) 105
3.9. TRAÇAGENS E TESTE 112
3.9.1. EXEMPLOS 112
3.10. MODULARIZAÇÃO (ORGANIZAÇÃO DE CÓDIGO) 116
3.10.1. CONTEXTUALIZAÇÃO (CAMADAS, COMPONENTES E SUB-ROTINAS) 116
3.10.2. SUB-ROTINAS 117
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 4 de 202
3.10.3. ÂMBITO DAS VARIÁVEIS 118
3.10.4. FUNÇÕES 119
3.10.5. PROCEDIMENTOS 127
3.10.6. PARAMETROS OU ARGUMENTOS 135
3.10.7. EXERCÍCIOS (FICHA Nº4) 143
3.11. VETORES 145
3.11.1. CONTEXTUALIZAÇÃO E EXEMPLOS 145
3.11.2. VETORES DO PONTO DE VISTA DA MEMÓRIA 153
3.11.3. ORDENAÇÃO 157
3.11.4. PESQUISA 161
3.11.5. STRINGS EM C (ARRAY ESPECIAL) 165
3.11.6. EXERCÍCIOS (FICHA Nº5) 177
3.11.7. MATRIZES 179
3.11.8. EXERCÍCIOS (FICHA Nº 6) 185
3.12. REGISTOS 186
3.12.1. CONTEXTUALIZAÇÃO (TIPOS DE DADOS COMPOSTOS) 186
3.12.2. EXERCÍCIOS (FICHA Nº 7) 196
4. SOLUÇÕES DE EXERCICIOS 199
4.1. FICHA 1 EXERCICIO 5 ALINEA A) 199
4.2. FICHA 1 EXERCICIO 5 ALINEA B) 199
4.3. FICHA 3 EXERCICIO 4 ALINEA A) 201
4.4. FICHA 3 EXERCICIO 4 ALINEA A) 201
4.5. FICHA 3 EXERCICIO 6 202
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 5 de 202
1. INTRODUÇÃO E CONCEITOS BÁSICOS
Esta sebenta pretende apoiar os alunos a iniciarem a sua aventura na área da algoritmia e da
programação. Pretende-se estimular os alunos a desenvolver as capacidades necessárias à aplicação da
lógica e raciocínio, ao serviço do desenvolvimento de aplicações informáticas.
Houve uma grande preocupação em abordar os temas de forma simples e direta. Cada assunto é
devidamente documentado com casos exemplo e, para cada um, é apresentada uma proposta de
algoritmo e de implementação.
Com o objetivo de iniciar a familiarização dos alunos com várias linguagens de programação e até analisar
a sua semelhança, poderão haver propostas de implementação paralelas em várias linguagens como C,
C# e JAVA.
Neste capítulo inicial, serão abordados alguns conceitos básicos e terminologias que permitirão entender
melhor os temas apresentados nos restantes capítulos deste manual.
1.1. HARDWARE VS. SOFTWARE
A palavra informática resulta da união de (infor)mação auto(mática), ou seja, significa o tratamento da
informação através de meios automáticos e, o mais importante e conhecido meio de tratamento
automático de informação, é o computador.
O computador é um conjunto de componentes eletrónicos e circuitos elétricos que, no seu conjunto,
conseguem executar tarefas por obediência a um programa armazenado no seu interior. Neste contexto,
o computador é facilmente descrito como composto por dois grandes tipos de componentes:
x Hardware – engloba todos os componentes palpáveis ou com corpo físico e que permite executar
instruções precisas a determinada velocidade, armazenar dados e comunicar com periféricos;
x Software – que tem a função de ordenar as componentes físicas do hardware, ou seja é a
componente lógica do computador que tem a capacidade de comandar de forma coordenada os
diferentes componentes físicos para que executem de forma contextualizada.
A componente de software é a aquela que mais nos interessa no âmbito deste manual. No entanto, devido
à sua enorme diversidade e aplicabilidade, será também ele dividido em grupos ou tipos de software:
x Sistemas Operativos – composto por um conjunto de programas que consegue comunicar com o
hardware e que são responsáveis pela gestão de periféricos e demais recursos físicos.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 6 de 202
x Ferramentas de desenvolvimento – onde se enquadram todas as aplicações que permitem criar
outras aplicações. Neste conjunto incluem-se os compiladores e aplicações que facilitam o
desenvolvimento mais cómodo ao ser humano.
x Aplicações – que representa o grupo de programas usados pelo utilizador do sistema. Neste grupo
incluem-se os programas feitos à medida do cliente, editores de texto, folhas de cálculo, etc.
No que diz respeito ao tema tratado nesta sebenta, serão usadas várias ferramentas de desenvolvimento
com o objetivo de criar algumas pequenas aplicações que poderão, depois de compiladas, ser consumidas
pelo utilizador final.
1.2. APRESENTAÇÃO DA ALGORITMIA
Programar um computador, seria muito mais simples se fosse possível dar-lhe instruções do género
“calcule a média aritmética da turma à disciplina de inglês e escreva-a no ecrã…”. No entanto, tal não é
possível, já que se trata de uma instrução ambígua e demasiado simplista, faltando todo o detalhe e
sequência das operações necessárias à resolução do cálculo em causa.
Para que uma aplicação consiga executar uma operação aparentemente tão simples como esta, é
necessário disponibilizar toda a informação acessória ao cálculo, como as notas, equação para chegar à
média, como apresentar e formatar o resultado encontrado, etc.
O procedimento que está por detrás do cálculo da média poderá ser descrito, muito grosso modo, com a
seguinte sequência de operações:
1. Recolher/conhecer as notas;
2. Somar as notas recolhidas;
3. Dividir a soma obtida no ponto anterior pelo número de notas;
4. Escrever o resultado obtido no ponto anterior no ecrã;
Em programação, este tipo de procedimentos são chamados de algoritmos e, apesar de poderem também
ser escritos em texto fácil de ler e interpretar, contém um pouco mais de detalhe, devido à natureza exata
subjacente e também porque servem de base aos programadores no momento da implementação. Mais
à frente neste manual, serão abordados com mais pormenor os algoritmos escritos em linguagem
próxima do natural (linguagem estruturada ou pseudo-código), assim como os algoritmos escritos através
de fluxogramas.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 7 de 202
Um algoritmo pode então ser visto como uma forma de partir o problema inicial em problemas mais
pequenos e assim, uma forma de facilitar o processo de encontrar uma solução.
Voltando ao caso do cálculo da média, notar que, quando analisados cada um dos quatro problemas
individualmente, a sua solução individual é inquestionavelmente mais simples de ser conseguida do que
quando analisado o problema total por inteiro. Neste contexto, podemos definir um algoritmo como uma
forma de resolver um problema inicial complexo, como um conjunto finito de problemas mais pequenos
e, consequentemente, de mais fácil e simples resolução.
O algoritmo determinado para a resolução de um problema, pode variar de programador para
programador, não havendo assim uma única solução para cada problema. No entanto, é possível
identificar um conjunto de ações que podem servir de base ao processo de criação de um algoritmo.
A imagem seguinte apresenta graficamente os passos a seguir para a resolução do problema, desde a sua
identificação até à implementação da sua solução em código. Para este caso, foi adotada a abordagem
top-down com a criação de uma lista ordenada de “coisas a fazer”, similar à usada anteriormente ao
cálculo da média.
Figura 1 - Procedimento para elaboração de um algoritmo
Um algoritmo é formalmente definido como uma sequência finita de passos que levam à
execução de uma tarefa. Em informática, a elaboração de um algoritmo corresponde à
descrição de forma clara, ordenada e rigorosa, das operações que se pretende que a
aplicação execute para produzir determinado resultado.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 8 de 202
Um passo fundamental na criação do algoritmo é entender o problema. Só conhecendo-o total e
detalhadamente, será possível chegar a uma boa solução. Existem várias abordagens que podem ser
usadas no sentido de conhecer pormenorizadamente um problema e concretizar a sua solução num
algoritmo:
x Top-down – em que o problema principal é decomposto em problemas mais pequenos, logo mais
concretos e simples de resolver. Chama-se top-down pelo facto de partir dos pontos mais gerais
do problema em direção aos pontos mais detalhados.
x Bottom-up – em que se inicia a análise pelos pontos com maior detalhe em direção ao problema
principal (é precisamente o inverso do top-down).
x Refinamento progressivo – pode ser visto como um complemento ao top-down em que a
descoberta dos problemas mais finos é feita através de um processo iterativo.
x Modular – também complementar ao top-down em que a solução é montada sob a forma de
módulos, capazes de poderem ser reusados em várias zonas no mesmo algoritmo ou até por
outros algoritmos.
A decomposição do problema inicial num conjunto de problemas mais pequenos, permite ao analista
entender plenamente o problema principal como um todo. Esta lista, pode até ser usada para validar
junto do cliente (futuro utilizador) se efetivamente o problema foi corretamente entendido e isto, num
momento prévio a todo o processo de especificação e desenvolvimento.
Depois do problema percebido, é então iniciada a fase da elaboração do algoritmo. Na prática, criar um
algoritmo, não é mais do que adicionar detalhe e lógica para que, depois de implementado, a máquina
possa executar e automatizar o processo de chegar à solução.
Com o algoritmo criado pode então iniciar-se a fase do desenvolvimento. Esta fase é caracterizada pela
implementação do algoritmo na linguagem de programação escolhida.
De realçar que o profissional que desenvolve (cria o programa), implementa a lógica de programação
criada pelo profissional que criou o algoritmo. Portanto, e neste contexto, uma pergunta importante se
coloca – de quem é efetivamente o mérito da solução encontrada para o problema, ou seja, quem é
realmente o verdadeiro programador? Será quem cria o algoritmo ou quem o implementa?
Outra ideia deixada ainda pela imagem anterior, é o facto de não ser de todo recomendável passar
diretamente do conhecimento do problema para a fase do desenvolvimento, saltando portanto a fase da
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 9 de 202
análise do problema e da criação do algoritmo. Na realidade, este caminho pode sentenciar o projeto
porque muito provavelmente o problema não ficará totalmente resolvido, conduzindo a uma espiral de
retificações (também conhecidos por remendos) fazendo com que a fase de desenvolvimento nunca
acabe.
Cada equipa de programadores cria, implementa e melhora constantemente, o seu próprio ciclo de
desenvolvimento. A imagem seguinte apresenta um ciclo genérico que é usado como base por muitas
equipas de programação para a criação e evolução do seu próprio ciclo de criação de software.
Figura 2 - Ciclo de desenvolvimento genérico
Na realidade, passar pela análise do problema e pela elaboração do algoritmo antes da implementação,
promove a validação da lógica de programação para cada parte do problema. A consolidação obtida pelas
diferentes validações lógicas permite aferir acerca do bom funcionamento de toda a solução em conjunto
mesmo antes de escrever a primeira linha de código.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 10 de 202
Iniciar-se o desenvolvimento de imediato sem se analisar separadamente os problemas mais pequenos,
é equivalente a ver o problema por inteiro (complexo portanto), acrescido da natural complexidade da
implementação na linguagem de programação escolhida.
Com o tempo e com a experiência, é natural que os programadores se sintam à vontade para criar o
algoritmo e implementá-lo em simultâneo. No entanto, recorrerão sempre à elaboração formal e prévia
do algoritmo, quando o problema a resolver seja de maior dimensão ou apresente uma especificidade ou
uma complexidade superior à que estão habituados.
Nesta fase inicial de aprendizagem, é totalmente aconselhado que os alunos criem sempre os algoritmos
antes da implementação. Só desta forma conseguirão desenvolver as suas aptidões de criadores de lógica
de programação e garantir o sucesso das aplicações que entretanto desenvolvam.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 11 de 202
1.3. LINGUAGENS DE PROGRAMAÇÃO
Uma linguagem de programação pode ser vista como um meio de comunicação entre computadores e os
seres humanos que os programam. Pode ser definida como um conjunto de regras sintáticas e semânticas,
usadas com o objetivo de definir um programa, ou seja, um conjunto de instruções a serem executadas.
Uma linguagem permite que o programador especifique exatamente o que deve ser executado e sob que
regras tal deve acontecer. Uma linguagem de programação é então constituída:
x Regras de semântica – que definem o conjunto de termos, palavras e símbolos possíveis de usar
e que têm um determinado significado para o processador (depois de compilados)
x Regras de sintaxe – que definem a forma (ordem) correta para utilização desses termos, palavras
e símbolos, ou seja, define o que é uma instrução válida nessa linguagem.
O resultado final de uma implementação (desenvolvimento) numa linguagem de programação é chamado
de programa ou aplicação. Um programa não é mais do que um conjunto de instruções escritas, que
respeitam a semântica e sintaxe definida pelas especificações da linguagem de programação escolhida e
que, depois de compiladas, são executadas pelo processador com o objetivo de resolver o problema
subjacente à lógica de programação criada pelo profissional que criou o algoritmo agora implementado.
Esse algoritmo é a “receita” que foi criada por alguém totalmente “conhecedor em detalhe” do problema
a resolver e que, depois de concluído, pode ser desenvolvido numa linguagem de programação com o
objetivo de automatizar a processo de resolução do problema.
De notar que um programa pode resultar da implementação de um ou mais algoritmos. Dito de outra
forma, um problema pode ter (e normalmente tem) uma dimensão tal que implica a especificação através
de vários algoritmos e não apenas um.
As linguagens de programação podem ser classificadas quanto ao nível de proximidade do programador
para com a linguagem entendida pelo computador:
x Linguagens de alto nível – define um tipo de linguagem em que o programador define as
instruções a serem processadas sem a preocupação de como o processador as executará.
Tipicamente estas linguagens têm um vocabulário mais próximo da linguagem humana do que as
de médio e baixo nível e contém um conjunto mais alargado de operações possíveis de serem
usadas na escrita de um programa.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 12 de 202
x Linguagens de médio nível – define uma classe de linguagens intermédia entre o alto e o baixo
nível. A linguagem característica que define esta classe é o C, já que permite trabalhar com
registos de sistema e endereços de memória (características típicas das linguagens de baixo nível),
mas também permite trabalhar com instruções e operações próximas do ser humano e assim
mais próximas da linguagem natural (características que tipicamente definem uma linguagem de
alto nível).
x Linguagens de baixo nível – que inclui as linguagens em que o programador, além de definir o
que pretende ver processado, tem que se preocupar como os pormenores de execução do
processador (ex: gestão de memória). Incluem-se neste grupo a linguagem máquina (escrita em
bits 0s e 1s) e a linguagem assembly que é formada por instruções em mnemónicas mas mesmo
assim, uma linguagem muito próxima da máquina.
De notar que, apesar das linguagens de alto nível serem mais fáceis de programar, para serem executadas
pelos processadores, tem que estar em linguagem máquina. É aqui que surge o papel dos compiladores
que se encarregam de “traduzir” aquilo que os programadores escrevem numa linguagem mais
entendível ao ser humano na única possível de ser executada pelos processadores e que depende da sua
arquitetura (complexidade abstraída normalmente pelo próprio compilador).
EXEMPLO: e = a + b - (c + d)
ALGORITMO MÁQUINA ASSEMBLY C, JAVA, C#...
s Å c + d 01101001001…. s, ADD c, d s = c + d;
r Å b - s 01111001010…. r, SUB b, s r = b – s;
e Å a + r 01000010010…. e, ADD a ,r e = a + r;
fim 00011010101…. HLP return
As linguagens de programação evoluíram muito ao longo dos anos. Nos anos 50 surgiram as primeiras de
alto nível das quais se destaca o FORTRAN, sendo que no final dos anos 60 eram já perto de 100, numero
que nos dias de hoje ascende aos milhares.
Para mais facilmente se conhecer o aparecimento e grau de parentesco entre as linguagens de
programação, apresenta-se de seguida uma imagem elucidativa, contendo apenas um excerto das mais
conhecidas.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 13 de 202
Como é percetível pela imagem, as linguagens C++, JAVA, C# e Python (as mais usadas no
desenvolvimento de aplicações comerciais e no ensino), têm nós de parentesco comuns, o que explica a
semelhança nas regras de semântica e de sintaxe.
Figura 3 - Evolução de linguagens de programação (algumas)
Terminando esta curta introdução às linguagens de programação, salientar que existem três grandes
paradigmas ou modelos de desenvolvimento que são, no fundo, diferentes perspetivas ou filosofias de
criar aplicações:
x Funcional (Haskell) – a parte lógica das soluções é implementada através da definição prévia de
funções. Existe uma grande aproximação às aplicações desenhadas através de aplicativos de
matemática.
x Imperativo (C, Cobol, Pascal, etc.) – em que o código é implementado sob a forma de comandos
(ordens) que vão alterando o estado (variáveis) do programa. Um programa criado sob este
paradigma é composto por uma sequência de comandos que o computador deve executar na
ordem especificada (fazer A, fazer B, fazer C, etc.). É provavelmente o paradigma mais fácil de
entender porque é o mais natural ao ser humano pelo facto de estar habituado a receber ordens
(instruções) em forma de procedimento.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 14 de 202
x Declarativo (Prolog, Haskell, etc.) – que difere do modelo imperativo pelo facto das aplicações
não serem implementadas sob a forma de sequência de instruções que vão alterando o estado
global. Em vez disto, em programação declarativa, é definido o que precisa de ser feito, ficando
sob a responsabilidade da máquina (linguagem de programação) encontrar a melhor solução para
essa solicitação.
x Orientado a objetos (C++, JAVA, C#, etc.) – é uma forma de programar com um raciocínio mais
próximo de como definimos algo na vida real. Por exemplo o carro 11-AA-22 é um objeto que
contém propriedades que o identificam como a marca, modelo e cor (seat, Ibiza, preto),
respeitando um modelo definido inicialmente à partida chamado – classe.
O quadro seguinte compara algumas das linguagens de programação mais conhecidas quanto ao seu
nível, paradigma e modo execução.
LINGUAGEM NÍVEL PARADIGMA EXECUÇÃO
Assembly Baixo Imperativa Simples Compilada
C Médio Imperativa Compilada
C++ Médio Imperativa, OO Compilada
C# Médio / Alto Imperativa, OO Híbrida
Haskell Alto Funcional Interp. / Comp.
Java Médio / Alto Imperativa, OO Híbrida
Perl Alto Imperativa Interpretada
Prolog Alto Declarativa Interpretada
Python Alto Imperativa Interpretada
Visual Basic .NET Alto Imperativa, OO Híbrida
Note-se também a caracterização de cada linguagem quanto ao modo de execução:
x Linguagens Compiladas – em que o código digitado pelo programador é transformado
(“traduzido”) pelo compilador para uma linguagem máquina de forma a poder ser reconhecido
(executado) pelo processador.
x Linguagens Interpretadas – define um conjunto de linguagens que não recorrem ao processo de
compilação para que o processador consiga entender e executar as instruções. Em substituição
deste passo, a própria linguagem inclui mecanismos que são responsáveis, em momento de
execução, pela tradução instantânea de cada instrução para que o processador a entenda. Em
termos genéricos, podemos afirmar que as aplicações interpretadas tem uma execução um pouco
mais lenta, atendendo a este overhead que acontece em momento de execução.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 15 de 202
x Linguagens Híbridas – são linguagens (tipicamente de alto nível) que são simultaneamente do
tipo compiladas e interpretadas. A compilação é também um processo de “tradução” mas não
para uma linguagem a ser entendida diretamente pelo processador. Em vez disso, a compilação
traduz o código para uma linguagem mais próxima da linguagem máquina que, posteriormente e
em momento de execução, é interpretada por uma plataforma criada para o efeito que faz a
mediação de execução com o processador (ex: framework .Net, Java Virtual Machine)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 16 de 202
1.4. TIPOS DE INSTRUÇÃO (SEQUÊNCIA, DECISÃO E REPETIÇÃO)
Na década de 50 e 60, o negócio principal na área da informática era o hardware. No entanto, com
aumento enorme das suas características (principalmente a velocidade e capacidade de armazenamento),
os clientes começaram a exigir mais fiabilidade e funcionalidade às pequenas e limitadas aplicações que
se produziam na altura.
Na década de 70 os projetos entregues às equipas de desenvolvimento, eram cada vez de maior dimensão
e mais sofisticados, fazendo com que os custos despendidos com software ultrapassassem largamente o
custo com hardware.
Foi nesta altura que a profissão de programador (vista até à altura um pouco como uma arte já que era
feita em linguagens de muito baixo nível) passou a ter a exigência e rigor comparável com uma
engenharia. Surgia assim a disciplina de Engenharia de Software que pretendia formar profissionais
capazes de produzir software eficiente, fiável, seguro e com custos controlados.
A produção de software é feita ao longo de algumas fases (levantamento de requisitos, análise, desenho
técnico, implementação, testes, etc.) e, para levar a cabo cada uma destas fases, foram estudados
métodos e técnicas. A programação estruturada é precisamente um desses métodos que permite fasear
o processo de construção de um programa descrevendo o processo computacional através de um
algoritmo.
A programação estruturada define um conjunto de regras para a elaboração de um programa e baseia-se
na organização em módulos com refinação iterativa. De acordo com este método, qualquer programa
pode ser implementado com base em três tipos de estruturas de controlo:
x Instruções de sequência – são ordens simples (atómicas), usadas em cálculos, atribuição de
valores, leitura e escrita de dados;
x Instruções de decisão – também chamadas instruções de seleção que permitem a escolha
(decisão) entre vários caminhos de processamento com base em avaliações lógicas de uma
condição;
x Instruções de repetição – referenciados também como ciclos, permitem a execução de forma
repetida de um conjunto de instruções. Cada repetição desse conjunto é chamado de iteração e
a decisão acerca de se existe ou não lugar a nova iteração (se a execução do ciclo deve ou não
continuar) é da responsabilidade de uma condição, avaliada no início ou no fim de cada iteração.
Estas estruturas serão analisadas em detalhe à frente nesta sebenta.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 17 de 202
1.5. TIPOS DE NOTAÇÃO DE ALGORITMOS (PSEUDO-CÓDIGO E
FLUXOGRAMA)
De uma forma um pouco simplista, podemos dizer que um algoritmo é constituído pelos dados
necessários à execução (recebidos e produzidos), e o raciocínio lógico necessário de executar para
solucionar o problema.
Um algoritmo pode ser descrito de várias formas, e a forma escolhida depende do programador que o
cria e também da audiência a quem se destina. Entre os formalismos mais usados, destacam-se:
x Pseudo-código – consiste na descrição do algoritmo numa linguagem estruturada mas próxima
da linguagem natural (português, inglês, outra). O objetivo é permitir que o programador se possa
dedicar (concentrar) na lógica do algoritmo, sem se preocupar com as questões de semântica e
sintaxe de uma linguagem de programação.
Figura 4 - Estrutura base de um algoritmo em pseudo-código
x Fluxograma – consiste na descrição de um algoritmo de forma gráfica, usando para isso um
conjunto de símbolos gráficos que representam os diferentes tipos de instruções apresentadas
no ponto anterior (ver imagem seguinte).
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 18 de 202
Figura 5 - Símbolos gráficos usados em fluxogramas
Apesar de ser possível representar qualquer algoritmo num fluxograma, são mais usados efetivamente
na representação de problemas mais pequenos ou então em processos com elevado nível de abstração.
Se fossem usados em algoritmos grandes, um fluxograma estender-se-ia por várias páginas tornando
quase impraticável a sua leitura e inviável a sua interpretação.
De seguida apresenta-se um problema exemplo, e duas sugestões de solução. Na primeira sugestão foi
usada a representação num fluxograma e na segunda uma implementação através de pseudo-código.
PROBLEMA
Há a necessidade de criar uma aplicação que faça a recolha 3 números inseridos pelo utilizador e que
determine qual o maior valor introduzido. Construa o algoritmo que servirá de base à implementação.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 19 de 202
PROPOSTA DE SOLUÇÃO (usando um fluxograma)
Figura 6 - Proposta de solução através de fluxograma
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 20 de 202
PROPOSTA DE SOLUÇÃO (com pseudo-código)
Figura 7 - Proposta de solução através de pseudo-código
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 21 de 202
2. APRESENTAÇÃO DE FERRAMENTAS
2.1. VISUALG 2.0
O VisuAlg é um interpretador de algoritmos que nasceu da necessidade dos alunos poderem testar as
respostas aos exercícios de iniciação à programação, sem a presença do docente. Uma das grandes
vantagens em usar este programa como apoio à resolução de problemas, é o facto de se poder fazer
depuração na lógica em implementação, permitindo aos alunos autodescobrir possíveis erros cometidos.
Os alunos devem desenvolver a capacidade de execução mental de um algoritmo. No entanto, podem e
devem usar esta ferramenta como forma de comprovar que esse raciocínio está correto, já que a
ferramenta permite a execução, como se o algoritmo já estivesse implementado numa linguagem possível
de interpretar pelo processador.
De realçar que o VisuAlg foi criado no Brasil pelo Professor Cláudio Morgado de Sousa e que, por esse
motivo, os termos usados não são exatamente os que usamos habitualmente em Portugal. No quadro
seguinte são apresentadas alguns exemplos a ter em conta.
BRASIL PORTUGAL
Escreva Escrever
Leia Ler
Escolha Selecionar
OutroCaso Senão
FimEscolha FimSelecionar
Para… Faça Para… Fazer
Enquanto… Faça Enquanto… Fazer
Repita… Até Repetir… Até
Var Variáveis
Interrompa Interromper
Continue Continuar
… …
(demonstração)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 22 de 202
2.2. MICROSOFT VISUAL STUDIO
O Visual Studio é um IDE (integrated development environment) de desenvolvimento criado pela
Microsoft que permite a criação e depuração de aplicações .Net (lê-se dotNet) de forma rápida e fiável.
A plataforma .Net surge da estratégia da Microsoft oferecer um ambiente de desenvolvimento único
independentemente do equipamento e sistema operativo onde vá ser executado o programa depois de
compilado. Para executar um programa feito nesta tecnologia num determinado equipamento, basta que
a framework .Net (versão correta) esteja instalada nesse equipamento (estratégia similar à máquina
virtual do JAVA).
O objetivo principal do .Net é juntar numa única plataforma de desenvolvimento as funcionalidades
necessárias à implementação de uma solução de início a fim, abstraindo o programador de grande parte
dos detalhes relacionados diretamente com o dispositivo onde será executado.
Existem vários motivos pelos quais a comunidade de programadores adota o Visual Studio como
ferramenta predileta de desenvolvimento:
x Intellisense – é o valioso suporte dado pelo editor de código (assistência ao processo de
codificação), que permite ao programador escrever código com apoio de semântica e sintaxe
permanente;
x Debugging – que permite ao programador presenciar a execução do seu código, avaliando a cada
instante o valor de variáveis e as chamadas feitas entre os diferentes componentes. Trata-se de
uma funcionalidade que permite ver a acontecer o processamento de instruções numa
velocidade possível de acompanhar pelo ser humano.
2.2.1. TIPOS DE PROJETOS (PRINCIPAIS)
O Visual Studio oferece um ambiente de desenvolvimento para vários tipos de projeto e várias linguagens
(C++, Visual Basic, C# e J#):
x Console Application – para aplicações do tipo consola em que existe pouca interação com o
utilizador e o aspeto gráfico é secundário;
x Windows Forms Application – para criação de aplicações a serem executadas em Windows. São
aplicações mais pesadas do ponto de vista do processador já que tem uma componente gráfica
muito superior. São os tipos de projetos mais usados em sistemas operativos Microsoft e
oferecem um bom “user experience”;
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 23 de 202
x Windows Phone App – para criação de aplicações a serem usadas em Windows Phone.
x ASP.Net Web Forms Application – para a criação de aplicações web;
x Class Library – para a criação de bibliotecas de componentes reusáveis entre várias aplicações;
x Outros – como projetos para Cloud, Windows store, etc.
Figura 8 - Microsoft Visual Studio 2013 (projetos)
(demonstração)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 24 de 202
2.3. DEV C++ (BLOODSHED)
O Dev C++ é um ambiente de desenvolvimento com editor, compilador e depurador, que exige poucos
recursos do computador (P. Alexandre, 2015). É uma ferramenta gratuita para Windows.
Figura 9 - Dev C++
(demonstração)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 25 de 202
3. ALGORITMOS EM PSEUDO-CÓDIGO
3.1. REGRAS, TERMINOLOGIAS E ESTRUTURA DOS ALGORITMOS
Um algoritmo inicia sempre com o termo Algoritmo e termina com o termo Fim_Algoritmo. Estes
dois termos delimitam todo o algoritmo que pode ser divido em três zonas distintas (rever Figura 4):
x Zona das declarações – é o bloco imediatamente a seguir ao nome do algoritmo. Neste bloco são
inseridos comentários indicando o autor, versão e outros dados relevantes ao algoritmo e, com o
objetivo de facilitar a leitura, por vezes são também especificadas as variáveis de entrada e de
saída do algoritmo (listas identificadas pelas etiquetas Entrada e Saída).
x Zona das variáveis – é o bloco que se segue ao termo Variáveis e é o sítio correto onde devem
especificadas as variáveis necessárias ao algoritmo e os seus respetivos tipos.
x Zona de instruções – é o bloco delimitado pelas etiquetas Inicio e Fim e é onde realmente
vive a lógica criada pelo programador que, ao ser executada, soluciona o problema pretendido
pelo algoritmo.
É importante salientar que, a execução do algoritmo, ocorre sempre pela ordem das instruções e que,
com o objetivo de facilitar o entendimento da lógica fruto da criatividade do programador, são
constantemente usadas linhas de comentário para documentar instruções ou blocos de instruções.
As linhas de comentário podem ser usadas em qualquer zona do algoritmo, iniciam sempre com o caracter
identificador # (equivalente ao // do C, C# e JAVA) e tem por único objetivo documentar as instruções,
sendo descartados em runtime (momento de execução).
As palavras (termos) que compõem sintaxe da linguagem algorítmica são consideradas reservadas pelo
que não podem ser usadas, a não ser no contexto previsto pelas regras de sintaxe. Esta limitação estende-
se à generalidade das linguagens de programação incluindo C, JAVA e C# que tem também a sua lista de
termos reservados. No quadro seguinte apresentam-se alguns dos termos reservados pelas regras de
sintaxe da linguagem algorítmica.
ALGUMAS PALAVRAS RESERVADAS DA LINGUAGEM ALGORITMICA
algoritmo variáveis inicio fim inteiro
real numérico caracter verdadeiro falso
repetir ate enquanto fazer para
selecionar caso se então senão
e ou escrever ler função
procedimento interromper continuar booleano …
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 26 de 202
ALGUMAS PALAVRAS RESERVADAS DA LINGUAGEM C, JAVA e C#
void main boolean char byte
short int long float double
true false string null this
default do while break continue
return switch case if then
else for private public protected
new class extends interface …
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 27 de 202
3.2. CONSTANTES E VARIÁVEIS
As variáveis são essenciais para calcular e manipular dados em qualquer linguagem de programação. A
imagem abaixo, mostra através de uma analogia gráfica, como podem ser imaginadas as variáveis.
Uma variável pode ser entendida como uma caixa (lilás) que consegue guardar um valor (vermelho) e
cujo rótulo é constituído por um nome (azul) (que identifica univocamente o conteúdo ou seja o valor), e
um tipo (verde) (que especifica o tipo de dados que consegue guardar (numérico, texto, etc.)).
Figura 10 – Analogia gráfica para definição de variáveis (linguagem algorítmica)
O conteúdo dessa caixa, ou seja o valor da variável (vermelho), pode ser alterado sempre que necessário.
No entanto, o novo valor tem que ser sempre do tipo de dados (verde), inscrito inicialmente no rótulo da
caixa (variável) e, quando é alterado, o valor anterior é perdido.
Ao contrário do valor (vermelho), o nome (azul) e o tipo de dados (verde) mantêm-se fixos desde a criação
da variável (lilás), até ao momento que deixa de fazer falta e é destruída (descartada da memória).
As variáveis são palavras que tem o significado da natureza do seu conteúdo (semântica), e podem ser
acedidas através do seu nome. No entanto, para poderem ser usadas, têm que ser previamente
declaradas.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 28 de 202
Declarar uma variável, não é mais do que dizer ao computador que deve alocar (reservar) espaço em
memória para guardar valores. Voltando à analogia com a caixa, declarar uma variável não é mais do que
criar uma caixa vazia (sem valor), inscrevendo apenas no rótulo o nome e o tipo de dados permitido para
o valor que possa vir a conter.
À frente neste manual veremos que o processo de colocar um valor dentro da caixa é designado como
atribuição (Å).
Em algoritmos as variáveis são declaradas na zona variáveis apresentada no ponto 3.1 deste manual. Em
C#, as variáveis podem ser declaradas ao longo de todo o código. No entanto, até por uma questão de
organização e leitura de código, recomenda-se que sejam sempre declaradas no topo de cada método
(função ou procedimento). A linguagem C, por sua vez é um pouco mais restritiva pelo que se aconselha
veementemente que se declarem as variáveis antes do código. Sendo o C uma linguagem de baixo nível,
a gestão de memória é da responsabilidade do programador. Por este motivo, existem compiladores, que
não suportam ou lançam avisos (warnings) caso esta regra não seja tida em conta.
O nome a atribuir a uma variável obedece a regras e estas podem ser diferentes mediante a linguagem a
usar. Existem no entanto algumas regras que devem ser tidas em conta independentemente da linguagem
que se esteja a usar:
x O nome da variável deve ser sugestivo, ou seja, escolhido de forma a representar intuitivamente
o seu conteúdo;
x Não pode ser nenhuma das palavras reservadas da linguagem (ver ponto 3.1);
x O primeiro caracter deve ser uma letra ou um underscore ( _ );
x O comprimento tem restrições mediante a linguagem em questão. No C# o tamanho máximo do
identificado da variável é de 132, já no C depende do compilador mas rondam os 30 caracteres
(por exemplo o compilador TurboC tem o limite de 31 caracteres, que é a regra definida pelo
padrão ANSI C);
x As variáveis não podem conter espaços em branco;
x Grande parte das linguagens atuais são Case-Sensitive, ou seja, uma palavra em maiúsculas é
diferente da mesma palavra em minúsculas;
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 29 de 202
A sequência de imagens seguinte exemplifica a declaração de variáveis em diferentes linguagens iniciando
pelo pseudo-código. Para facilitar o entendimento, são usados os mesmos nomes e tipos de dados nas
diferentes linguagens.
Figura 11 – Declaração de variáveis em linguagem algorítmica
Figura 12 - Declaração de variáveis em C
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 30 de 202
Figura 13 - Declaração de variáveis em C#
O conceito de constante é em tudo similar ao da variável. A grande diferença é que o valor da constante
é atribuído no momento de compilação não podendo ser alterada durante o tempo de execução. De entre
as várias vantagens em usar constantes, salientar:
x O facto de não ser possível alterar um valor definido como fixo, ou seja, pode servir como uma
regra de proibição de alteração de um valor predefinido (ex: o valor de PI será fixo, o nome da
licença do programa, etc.);
x O sistema operativo não necessita alocar os recursos adicionais necessários às alterações de
valor;
Talvez pelo facto de uma constante poder ser facilmente substituída por uma variável (simplesmente não
alterada durante o tempo de execução), em algoritmos não é usual fazer a distinção (a não ser que seja
algo importante para a lógica que se pretende implementar). É normalmente na fase de desenvolvimento
que o programador decide converter uma variável não alterável em constante.
Em C e C#, para identificar uma constante, é usado o termo reservado const, como ilustrado a seguir.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 31 de 202
Figura 14 - Exemplo de declaração de constante em C
Figura 15 - Exemplo de declaração de constante em C#
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 32 de 202
3.3. TIPOS DE DADOS
Os tipos de dados, como apresentado no ponto 3.2, especificam o tipo de conteúdo possível de ser
guardado em cada variável. Como é mostrado na Figura 11, é aquando da declaração da variável que é
indicado o respetivo tipo de dados.
Em algoritmos são usados apenas os tipos de dados principais, sendo que, em momento de
implementação, cabe ao programador usar os tipos de dados mais adequados à realidade da linguagem
de programação escolhida.
As tabelas seguintes apresentam os tipos de dados mais usados nas linguagens C e C#. Para facilitar o
contexto e limitações de cada uma, é feita uma comparação com os tipos usados em pseudo-código.
PSEUDO-CODIGO TIPOS DE DADOS MAIS USADOS NA LINGUAGEM C
INTEIRO
char 1Byte De -128 a 127
unsigned
char 1Bytes De 0 a 255
short int 2Bytes De -32768 a 32767
unsigned
short int 2Bytes De 0 a 65535
int 2Bytes (16 bits)
4Bytes (32 bits)
De -32768 a 32767 (processador 16 bits)
De -2147483648 a 2147483647 (processador de 32 bits)
unsigned
int
2Bytes (16 bits)
4Bytes (32 bits)
De 0 a 65535 (processador 16 bits)
De 0 a 4294967295 (processador de 32 bits)
long int 4Bytes De -2147483648 a 2147483647
unsigned
long int 4Bytes De 0 a 4294967295
REAL
float 4Bytes De -3.402823e38 a 3.402823e38
double 8Bytes De -1.79769313486232e308 a 1.79769313486232e308
TEXTO OU
CARACTER char[] 1Byte / char ASCII (char adicional para o caracter terminador 0)
LOGICO ((sem correspondência))
PSEUDO-CODIGO TIPOS DE DADOS MAIS USADOS NA LINGUAGEM C#
INTEIRO
byte 1Byte De 0 a 255
int 4Bytes De -2147483648 a 2147483647
uint 4Bytes De 0 a 4294967295
short 2Bytes De -32768 a 32767
ushort 2Bytes De 0 a 65535
long 8Bytes De -922337203685477508 a 922337203685477507
ulong 8Bytes De 0 a 18446744073709551615
REAL
float 4Bytes De -3.402823e38 a 3.402823e38
double 8Bytes De -1.79769313486232e308 a 1.79769313486232e308
decimal 16Bytes De ±1.0 × 10e−28 a ±7.9 × 10e28
TEXTO OU
CARACTER
string Unicode Æ 1 Caracter = 2 Bytes
char 2Bytes Unicode Æ 1 Caracter = 2 Bytes
LOGICO bool 1Byte
[verdadeiro|falso] precisaria apenas de 1bit, mas a unidade
mínima endereçável de memória é o Byte
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 33 de 202
Como é percetível, existem vários tipos de dados que podem ser usados para a mesma natureza de
valores. A diferença entre eles é o tamanho da caixa, ou seja, a quantidade de Bytes que serão necessários
para guardar os respetivos valores.
A título de exemplo analise-se novamente a declaração da variável “ano” da Figura 11. Foi usado o tipo
int ou seja, foi criada uma caixa com 4Bytes de tamanho para albergar um valor inteiro que dificilmente
fugirá ao intervalo [0:2999]. Em ambiente académico, não se coloca a necessidade de rigor absoluto no
tipo de dados mais adequado a cada realidade, no entanto, deve-se ainda assim, ter em conta a escolha
de um tipo suficientemente grande para albergar o intervalo de valores possíveis.
A responsabilidade da correta e rigorosa escolha do tipo de dados de cada variável é do implementador
aquando da fase de desenvolvimento. É lógico que pode sempre usar-se um tipo de dados que permita
guardar um grande intervalo de valores, por exemplo, é possível declarar e usar a variável idade com o
tipo de dados long int (long C#), no entanto, não é uma escolha racional do ponto de vista dos
recursos alocados. A escolha do tipo de dados para cada variável é muito mais do que escolher um tipo
que contenha um intervalo de valores suficientemente grande para a natureza de dados que se pretende
guardar. Não esquecer que, quanto maior for a quantidade de Bytes alocados, mais recursos de memória
e de processador (tempo de execução) serão necessários para manipular variáveis.
As imagens seguintes apresentam propostas de tipos de dados em C e C# para implementação do
algoritmo da Figura 11. Abaixo de cada variável (caixa) é apresentada a quantidade de memória que será
alocada (tamanho da caixa) com cada declaração de variável.
Figura 16 - Proposta de tipos de dados para implementação em C
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 34 de 202
Figura 17 - Proposta de tipos de dados para implementação em C#
São muitas as linguagens de programação que obrigam à declaração das variáveis antes de serem usadas.
Esta necessidade de declarar variáveis com os respetivos tipos de dados, tem algumas vantagens, como
por exemplo:
x Contextualização de analistas e programadores – um nome de variável sugestivo associado a
uma correta atribuição do tipo de dados, promove a boa contextualização por parte de quem lê
e interpreta, ou seja, funciona como uma confirmação que se entendeu corretamente o
propósito da existência da variável no contexto do bloco de código em que se insere.
Na imagem seguinte, pode ser observado como uma atribuição “não natural” (inesperada) do tipo
de dados, pode contribuir para a ambiguidade na interpretação do significado da variável.
Figura 18 - Definição ambígua de tipos de dados em pseudo-código
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 35 de 202
Figura 19 - Definição ambígua de tipos de dados em C
Figura 20 - Definição ambígua de tipos de dados em C#
Em contraste, se forem usados os tipos de dados esperados (expectáveis, naturais) para cada
variável, essa informação funciona, para quem lê, como um validador de que foi entendido o
motivo da existência da variável no contexto da solução que se está a desenvolver (algoritmo ou
bloco de código).
Figura 21 - Definição natural de tipos de dados em pseudo-código
Figura 22 - Definição natural de tipos de dados em C
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 36 de 202
Figura 23 - Definição natural de tipos de dados em C#
x Suporte à codificação com maior produtividade – esta talvez seja uma vantagem mais do C# do
que do C já que é totalmente dependente do editor de código. O editor original de código C#
(Microsoft Visual Studio) é constituído por um conjunto de mecanismos que validam a correta
utilização dos tipos de dados e, quando existe um conflito entre o tipo declarado e o
efetivamente usado, o programador é alertado imediatamente para corrigir o problema. Esta
assistência ao desenvolvimento oferecida pelo IDE, promove o ato de bem codificar à primeira,
já que um grande número de erros serão detetados e corrigidos instantaneamente aquando do
desenvolvimento e não em tempo de compilação / depuração.
Na linguagem C esta vantagem não é tão visível já que a maioria dos validadores apenas fazem o
seu trabalho em momento de compilação. No entanto, ainda assim alertam para o uso incorreto
do tipo de dados num momento pré-execução o que permite ao programador detetar erros antes
do lançamento do executável.
Figura 24 - Alerta para o uso incorreto de tipo de dados em momento de compilação (C)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 37 de 202
Figura 25 - Alerta para o uso incorreto de tipo de dados em momento de codificação (C#)
3.4. OPERADORES MATEMÁTICOS
Nesta secção são apresentados os operadores aritméticos usados na linguagem algorítmica. A tabela
seguinte apresenta-os individualmente, fazendo um paralelismo com os operadores equivalentes usados
em C e C#.
ALGORITMOS C, C# NOTAS
+ + Adição
- - Subtração
* * Multiplicação
/
/
Se dois inteiros o resultado será divisão inteira (), senão será a divisão real
Ex: 7/2 = 3; 7/2.0 = 3,5
 ou DIV
% ou MOD % Resto da divisão Ex: 5 % 2 = 1
De seguida apresentam-se alguns exemplos de código onde se podem analisar a aplicação de operadores
matemáticos.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 38 de 202
Figura 26 - Uso do operador soma em pseudo-código
Figura 27 - Uso do operador soma em C
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 39 de 202
Figura 28 - Uso do operador soma em C#
Figura 29 - Uso do operador de divisão em pseudo-código
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 40 de 202
Figura 30 - Uso do operador de divisão em C
Figura 31 - Uso do operador de divisão em C#
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 41 de 202
Figura 32 - Uso do operador resto em pseudo-código
Figura 33 - Uso do operador resto em C
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 42 de 202
Figura 34 - Uso do operador resto em C#
As imagens seguintes apresentam a forma de usar os incrementadores e decrementadores. De notar que
o uso de contadores em pseudo-código (ou linguagem algorítmica) é um pouco mais restritiva quanto a
forma de implementar. Em C e C#, como é visível nas imagens seguintes, existem várias formas de
codificar este tipo de instruções.
Figura 35 - Uso de operador incrementador e decrementador em pseudo-código
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 43 de 202
Figura 36 - Uso de operador incrementador e decrementador em C
Figura 37 - Uso de operador incrementador e decrementador em C#
O bloco de código seguinte, mostra como conjugar o símbolo de atribuição em conjunto com outros
operadores matemáticos.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 44 de 202
Figura 38 - Exemplo de atribuição em conjunto com operadores matemáticos em C
Figura 39 - Exemplo de atribuição em conjunto com operadores matemáticos em C#
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 45 de 202
Para ser possível representar programaticamente as expressões matemáticas, é necessário proceder à
sua linearização, ou seja, transforma-las em linhas, usando operadores da forma conveniente. A imagem
seguinte apresenta um exemplo equação e a sua equivalente linearizada.
Figura 40 - Linearização de equações
3.5. OPERADORES LÓGICOS E RELACIONAIS
Os operadores lógicos e relacionais permitem efetuar comparações entre termos e são fundamentais na
programação. Todos os programas usam expressões relacionais e lógicas, pois todos eles necessitam
tomar decisões para controlo de fluxo do programa.
A simbologia usada como operadores relacionais é em tudo semelhante com a linguagem matemática, e
o resultado de uma avaliação (entre dois operandos ou duas expressões) pode ser o valor lógico
(booleano) verdadeiro (1) ou falso (0).
A tabela seguinte apresenta os operadores relacionais usados em linguagem algorítmica, em C e C#.
ALGORITMOS C, C# NOTAS
> >
Exemplo: A > B
Se A for maior que B a condição é verdadeira (1), caso contrário é falsa (0).
< <
Exemplo: C < D
Se C for menor que D a condição é verdadeira (1), nos outros casos é falsa
(0).
>= >=
Exemplo: E >= F
Se E for maior ou igual a F, então a condição é verdadeira (1), caso contrário
é falsa (0).
<= <=
Exemplo: G <= H
Se G for menor ou igual a H, então a condição é verdadeira (1), caso
contrário é falsa (0).
= ==
Exemplo: I == J
Se I for igual a J então a condição é verdadeira (1), senão é falsa (0).
<> !=
Exemplo: K != L
Se K for diferente de L então a condição será avaliada como verdadeira (1),
em qualquer outro caso será falsa (0).
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 46 de 202
Os operadores lógicos atuam sobre expressões de onde também resultam os valores lógicos verdadeiro
(1) ou falso (0). Na prática é uma forma de conjugar o resultado de várias avaliações em simultâneo. A
tabela seguinte apresenta os operadores lógicos usados em algoritmia, em C e C#.
ALGORITMOS C, C# NOTAS
E
&
&&
Exemplo: ( A > B ) & ( C < D )
Se ambos os operandos forem verdadeiros (1), ou seja, se A for maior que
B e C menor que D, a expressão no seu todo é avaliada como verdadeira.
Quando usado o operador lógico &, ambos os operandos são sempre
avaliados.
Se for usado o && e se o primeiro operando resultar em falso (0), o segundo
já não é avaliado já que, qualquer que seja o seu resultado, a expressão
completa será avaliada sempre como falsa (0).
OU
|
||
Exemplo: ( A > B ) | ( C < D )
Basta que um dos operandos seja verdadeiro (1) para que a expressão no
seu todo seja avaliada como verdadeira.
Quando usado o operador lógico |, ambos os operados são sempre
avaliados.
Quando usado o operador ||, se o primeiro operando for verdadeiro (1), o
segundo não será avaliado porque, qualquer que seja o seu valor, a
expressão avaliará sempre como verdadeiro (1).
NÃO !
Exemplo: ~ ( A > B )
Se A maior que B então o resultado é falso (0) já que A > B é verdadeiro e a
negação de verdadeiro é falso. Qualquer outro caso é verdadeiro (1).
As imagens seguintes apresentam alguns exemplos de uso de operadores relacionais e lógicos.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 47 de 202
Figura 41 - Uso de operadores relacionais e lógicos em VisuAlg (1)
Figura 42 - Uso de operadores relacionais e lógicos em C (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 48 de 202
Figura 43 - Uso de operadores relacionais e lógicos em C# (1)
Figura 44 - Uso de operadores relacionais e lógicos em VisuAlg (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 49 de 202
Figura 45 - Uso de operadores relacionais e lógicos em C (2)
Figura 46 - Uso de operadores relacionais e lógicos em C# (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 50 de 202
3.6. INSTRUÇÕES DE SEQUÊNCIA
As instruções do tipo sequencial são as que tem uma estrutura simples e são responsáveis pelos inputs e
outputs de dados, execução de cálculos e atribuição de valores a variáveis. O fluxo de execução das
instruções é de cima para baixo, como demonstra a imagem seguinte.
Figura 47 - Fluxo de execução de instruções
3.6.1. ATRIBUIÇÃO
Atribuição é o nome dado ao processo de inserir um valor na variável, relembrando a analogia com as
caixas, é a forma de inserir um valor na caixa (substituindo o lá existente se for o caso).
O quadro seguinte apresenta a simbologia de atribuição usada em linguagem algorítmica e em C, JAVA e
C#.
SIMBOLO EXEMPLO
ALGORITMOS Å nome Å “Célio Carvalho”
C, JAVA e C# = nome = “Célio Carvalho”
Um dos erros mais frequentes com o uso do sinal igual (=) é a possível confusão que pode gerar com o
duplo igual (==). Enquanto a primeira versão (=) representa a atribuição de um valor a uma variável, o
segundo (==) é usado como forma de comparar a igualdade entre dois valores ou variáveis.
Como já foi usada várias vezes a atribuição, recorda-se simplesmente a forma de usar com a imagem do
exemplo seguinte.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 51 de 202
Figura 48 - Atribuição em VisuAlg
Figura 49 - Atribuição em C
Figura 50 - Atribuição em C#
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 52 de 202
3.6.2. ENTRADA/SAÍDA DE DADOS (LER E ESCREVER)
Como já visto anteriormente, um programa necessita de dados para resolver o problema sendo que, estes
dados, são normalmente inseridos pelo utilizador ou lidos a partir de uma base de dados. Por outro lado,
um programa tem que comunicar o resultado final ao utilizador, havendo assim a necessidade de usar
uma forma de o fazer.
Em linguagem algorítmica usam-se as instruções:
x LER – para recolher informação inserida pelo utilizador;
x ESCREVER – para mostrar informação ao utilizador, como por exemplo, o resultado final da
solução do problema;
A forma de recolher e mostrar dados ao utilizador de uma linguagem de programação depende da
tecnologia de desenvolvimento envolvida:
x Console Applications – usam-se comandos de consola para recolher e mostrar informação.
x Aplicações Windows Forms e Aplicações Web – usam-se vários controlos em função do tipo de
dados a inserir. Por exemplo, Textbox, Combobox, DataGrid, Listbox, etc.
x Aplicações Windows Phone – usam-se controlos também em função do tipo de dados a inserir,
como por exemplo, Textbox, Combobox, Checkbox, RadioButton, etc.
As imagens seguintes demonstram o uso dos comandos responsáveis por ler e escrever dados em pseudo-
código e a partir de projetos de consola C e C#.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 53 de 202
Figura 51 - Ler e Escrever para processos de LER e ESCREVER em VisuAlg (1)
Figura 52 - Ler e Escrever para processos de input e output em C (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 54 de 202
Figura 53 - Ler e Escrever para processos de input e output em C# (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 55 de 202
Figura 54 - Ler e Escrever para processos de LER e ESCREVER em VisuAlg (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 56 de 202
Figura 55 - Ler e Escrever para processos de input e output em C (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 57 de 202
Figura 56 - Ler e Escrever para processos de input e output em C# (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 58 de 202
3.6.3. EXERCÍCIOS (FICHA Nº 1)
[01] - Um professor pretende encontrar uma forma simplificada de calcular a nota final à disciplina de
inglês de um aluno. A fórmula que usa na sua metodologia de avaliação considera uma ponderação
diferente do primeiro teste (t1) para o segundo (t2).
𝒏𝒐𝒕𝒂𝑭𝒊𝒏𝒂𝒍 = 𝟎, 𝟒𝒕𝟏 + 𝟎, 𝟔𝒕𝟐
a) Considerando que os valores das notas devem ser inseridas pelo utilizador, proponha um
algoritmo (e implemente-o), que apresente ao utilizador a nota final da disciplina.
b) Evolua o algoritmo anterior no sentido de ser inserido e apresentado o nome do aluno
aquando da resposta da nota final.
c) Evolua ainda o mesmo algoritmo, para que a nota final possa também ser calculada para
outras disciplinas usando a mesma fórmula.
[02] – Há a necessidade de conhecer informaticamente o resultado das operações aritméticas entre dois
números inteiros escolhidos pelo utilizador.
a) Construa um algoritmo que seja capaz de apresentar, em várias linhas, os resultados da sua
adição, subtração, multiplicação, divisão (não tratar exceção da divisão por zero) e resto.
Implemente o algoritmo criado.
[03] – O consumo de combustível de um carro pode ser calculado em função da distância percorrida com
determinada quantidade de combustível, como apresentado na fórmula seguinte.
𝑥 =
litrosConsumidos
kmPercorridos
∗ 100
a) Proponha um algoritmo que recolha os dados referentes a uma viagem (litros consumidos e
quilómetros percorridos), e calcule o consumo aos 100km obtido na viagem. Implemente o
algoritmo.
b) Evolua o algoritmo de forma a perguntar o custo do combustível por litro e, com esta nova
informação, indique qual o custo da viagem.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 59 de 202
[04] – Com a criação do Euro (moeda usada nos países da CE aderentes), a nossa necessidade de cálculo
de câmbios reduziu drasticamente. No entanto, e principalmente quando realizamos negócios com países
não pertencentes à CE, é frequente ter que se calcular o câmbio da moeda, ou seja, quanto vale um
determinado valor em euros, noutra moeda estrangeira. A imagem seguinte apresenta uma proposta de
algoritmo que visa resolver este problema.
a) Considera que o algoritmo resolve integralmente o problema? Justifique. Proponha o seu
algoritmo no sentido de materializar possíveis melhorias e otimizações. Implemente a sua
proposta.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 60 de 202
[05] – De seguida é apresentado um algoritmo que foi criado com base na técnica dos fluxogramas.
Inicio
Fim
Insira nota de
avaliação continua
Se >= 10
Ler nota
então
alunoAprovado Å verdadeiro
exameFinal Å não
senão
Se < 8
então
alunoAprovado Å falso
exameFinal Å sim
Escrever alunoAprovado,
exameFinal
senão
Insira nota da prova oral
Se => 14
alunoAprovado Å falso
exameFinal Å não
então
senão
alunoAprovado Å falso
exameFinal Å sim
Ler nota
a) Entenda o problema e sugira o enunciado que poderia dar origem a esta solução.
b) Identifique os possíveis erros destacando-os visualmente e justificando a sua resposta.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 61 de 202
3.7. INSTRUÇÕES DE DECISÃO
Como já dito anteriormente, os programas são usados no sentido de automatizar soluções para
problemas existentes e, em todos os problemas, existe sempre a necessidade de tomar decisões com
base em dados.
As instruções de decisão (também conhecidas por instruções de seleção) permitem a escolha ou opção
entre vários caminhos possíveis, sendo que a decisão acerca do caminho escolhido, depende totalmente
do valor dos dados que serviram de base à decisão e do critério usado para a sua avaliação.
Analise-se a seguinte frase: “se ganhar o 1º prémio do euromilhões, compro uma casa para mim e ofereço
outra ao professor; se ganhar o 2º prémio então, em vez das casas compro dois carros, um para mim e
outro para ele; senão pago-lhe um jantar…”.
Como deve já estar a perceber, são inúmeras as vezes que o ser humano tem que tomar decisões porque
tudo na vida se baseia em escolhas.
Fique claro a existência de 3 caminhos distintos na frase acima:
x Caso ganhe o 1º prémio – se ganhar o 1º prémio…
x Caso ganhe o 2º prémio – se ganhar o 2º prémio…
x Nos restantes casos – senão (ou seja nos restantes casos… outros prémios) …
Também é importante que fique entendido que, a consequência pela escolha de um caminho apenas
acontece se o caminho em causa for o escolhido:
x se ganhar o 1º prémio
Æ …compro uma casa para mim e ofereço outra ao professor…
x se ganhar o 2º prémio
Æ …compro dois carros, um para mim e outro para ele…
x senão (ou seja nos restantes casos)
Æ … pago-lhe um jantar…
Esta secção mostra como preparar um algoritmo para a tomada de decisões com base em critérios
previamente definidos.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 62 de 202
3.7.1. SE.. ENTÃO… SENÃO….
Esta instrução de decisão é também conhecida por decisão binária já que permite decidir qual o caminho
a seguir de entre dois existentes ou, em alternativa, se deve ou não executar um bloco de instruções.
A imagem seguinte apresenta graficamente o uso da instrução Se… Então… para decidir acerca da
execução ou não de um bloco de instruções. As instruções apenas serão executadas se a condição a
analisar for verdadeira, se for falsa nada será processado.
Figura 57 - Instrução de decisão Se... Então...
PROBLEMA
Devido à crise, o governo decidiu criar uma sobretaxa de IRS extraordinária de 3,5% sobre os salários cujo
valor seja superior ao salário mínimo nacional. Esta nova taxa, apenas deve incidir sobre o valor que
remanesce depois de subtraído o salário mínimo ao salário do funcionário.
Sugira um algoritmo para resolver o problema, acautelando a exceção prevista para os funcionários que
apenas aufiram o salário mínimo nacional.
SOLUÇÃO
As imagens seguintes apresentam uma sugestão de resolução do problema.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 63 de 202
Figura 58 - Aplicação de Se...Então… na solução de um problema em VisuAlg
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 64 de 202
Figura 59 - Implementação de Se...Então… na solução de um problema em C
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 65 de 202
Figura 60 - Implementação de Se...Então… na solução de um problema em C#
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 66 de 202
A imagem seguinte demonstra o uso da instrução Se… Então… Senão… para decidir qual dos dois blocos
de instruções deve ser executado. Caso a condição seja verdadeira, será executado o bloco de instruções
1, senão será executado o bloco de instruções 2.
Figura 61 - Instrução de decisão Se... Então...Senão...
PROBLEMA
Na Unidade Curricular de português foi definida a nota mínima de 8,5 valores para o primeiro teste e de
9 valores para o segundo. Foi também decidido que a nota final à unidade seria a média aritmética entre
as notas desses dois testes.
A aprovação de um aluno é apenas possível se a nota final (média entre os dois testes) for igual ou superior
a 10 valores. Se o aluno tiver uma nota final igual ou superior a 17 valores terá que fazer defesa oral.
Nestes casos, a nota final do aluno será sempre inserida diretamente pelo professor. Caso não compareça
à defesa, o professor atribuirá a nota final de 17 valores.
Desenvolva um algoritmo para resolver o problema e sugira uma implementação.
SOLUÇÃO
As imagens seguintes apresentam uma sugestão de resolução do problema.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 67 de 202
Figura 62 - Aplicação de Se...Então…Senão na solução de um problema em VisuAlg
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 68 de 202
Figura 63 - Implementação Se...Então…Senão… na solução de um problema em C
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 69 de 202
igura 64 - Implementação Se...Então…Senão… na solução de um problema em C#
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 70 de 202
3.7.2. SELECIONAR… CASO1… CASO(N)… SENÃO….
Esta instrução de decisão é conhecida por decisão múltipla já que permite decidir qual o caminho a seguir
de entre vários possíveis. É usado normalmente em situações que se pretende testar uma variável com
vários valores possíveis.
A imagem seguinte mostra graficamente o uso desta instrução. Como é visível, o bloco de instruções a
executar depende inteiramente do valor da variável.
Figura 65 - Instrução de decisão Selecionar...Caso1...Caso(N)... Senão...
PROBLEMA
Um clube de futebol pretende um programa que lhe facilite o processo de classificação de atletas em
categorias. A tabela apresentada abaixo, define as categorias existentes e também os intervalos de idade
que especificam a categoria para cada atleta.
Com o objetivo de promover as inscrições na categoria Juvenil, o clube oferece a taxa de inscrição aos
atletas com 11 e 12 anos. Certifique-se que o utilizador é lembrado desse facto na sua implementação.
De ATÉ Categoria
11 15 Juvenil
16 20 Júnior
21 25 Profissional
Apresente uma solução para o problema.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 71 de 202
SOLUÇÃO
As imagens seguintes apresentam uma sugestão de resolução do problema.
Figura 66 - Aplicação de Selecionar...Caso1...Cason...Senao na solução de um problema em VisuAlg (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 72 de 202
Figura 67 - Implementação de Selecionar...Caso1...Cason...Senão na solução de um problema em C (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 73 de 202
Figura 68 - Implementação de Selecionar...Caso1...Cason...Senão na solução de um problema em C# (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 74 de 202
PROBLEMA
Para facilitar o controlo no consumo de energia, é necessário criar uma pequena aplicação que estime o
valor da fatura mensal de um cliente, com base nos Kw estimados de consumir num mês (estimativa de
consumo num mês). Tenha em atenção que, o custo por Kw varia em função do tipo de cliente:
x Particulares (continente) – 0,1865 €
x Particulares (ilhas) – 0,1875 €
x Pequenas empresas – 0,1754 €
x Médias e grandes empresas – 0,1592 €
x Estado e organismos públicos – 0,1311 €
Note que aos valores indicados é necessário acrescer IVA à taxa de 23%. Desenvolva um algoritmo que torne
simples a resolução deste cálculo.
SOLUÇÃO
As imagens seguintes apresentam uma sugestão de resolução do problema.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 75 de 202
Figura 69 - Aplicação de Selecionar...Caso1...Cason...Senao na solução de um problema em VisuAlg (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 76 de 202
Figura 70 - Implementação de Selecionar...Caso1...Cason...Senao na solução de um problema em linguagem C (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 77 de 202
Figura 71 - Implementação de Selecionar...Caso1...Cason...Senao na solução de um problema em linguagem C# (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 78 de 202
PROBLEMA
A escola “Só Crânios” inscreve automaticamente os alunos com idades compreendidas entre os 14 e os 18 anos
em atividades extracurriculares.
Desenvolva uma aplicação que recolha a idade, primeiro e ultimo nome de um aluno com o objetivo de, no
final, indicar ao utilizador qual a atividade em que o aluno se encontra automaticamente inscrito.
O programa deve garantir o cumprimento das regras seguintes:
x A idade só é válida se estiver entre os 14 e os 18 anos inclusive;
x O primeiro nome só é válido se tiver no mínimo 3 letras;
x O último nome só é válido se tiver no máximo 11 letras e no mínimo 4;
x O nome completo (concatenação do primeiro e último nome) não pode exceder os 18 caracteres
(incluindo o espaço que os separa).
A violação de qualquer uma destas regras significa o abandono prematuro do programa. No entanto, se todas
as regras foram validadas com sucesso, a aplicação deve informar qual a atividade em que o aluno se encontra
inscrito atendendo à sua idade (ver tabela abaixo).
IDADE Atividade
14 Aluno automaticamente inscrito nas aulas de dança
15 Aluno automaticamente inscrito nas aulas de futebol
16 Aluno automaticamente inscrito nas aulas de futebol
17 Aluno automaticamente inscrito nas aulas de ballet
18 Aluno automaticamente inscrito nas aulas de ballet
SOLUÇÃO
As imagens seguintes apresentam uma sugestão de resolução do problema.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 79 de 202
Figura 72 - Aplicação de Selecionar...Caso1...Cason...Senao na solução de um problema em VisuAlg (3)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 80 de 202
Figura 73 - Implementação de Selecionar...Caso1...Cason...Senao na solução de um problema em linguagem C (3)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 81 de 202
Figura 74 - Implementação de Selecionar...Caso1...Cason...Senao na solução de um problema em linguagem C# (3)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 82 de 202
3.7.3. EXERCÍCIOS (FICHA Nº 2)
[01] – O índice de massa corporal (IMC) de alguém é calculado através da divisão do peso em Kg pela sua
altura em m2
. Assim, por exemplo, uma pessoa de 1,67m que pese 55Kg tem um IMC = 19,72 porque,
𝐼𝑀𝐶 =
peso
altura2
=
55Kg
1,67m ∗ 1,67m
= 19,72
a) Desenhe um algoritmo que recolha os dados referentes a uma pessoa e calcule o seu IMC.
Quando terminar, implemente-o.
b) Evolua o algoritmo anterior para que mostre ao utilizador de forma automática a
interpretação do índice introduzido.
IMC Interpretação
Até 18,5 (inclusive) Peso abaixo do recomendado
De 18,5 até 25 (inclusive) Peso normal
De 25 a 30 (inclusive) Peso acima do recomendado
Mais que 30 Peso muito acima do recomendado (obesidade)
[02] – Um vendedor ganha um valor de salário fixo acrescido de 15% das vendas que realiza no mês. No
entanto, só recebe comissão se esta for de valor superior ao seu salário.
a) Desenvolva um algoritmo capaz de automatizar estes cálculos e, de seguida, implemente-o.
b) No final de cada mês é atribuída uma classificação a cada vendedor em função do volume de
vendas por si conseguido (ver quadro seguinte). Evolua o programa anterior de forma a
mostrar a classificação do vendedor e também o valor do prémio associado.
CLASSIFICAÇÃO VOLUME DE VENDAS PRÉMIO
D Até 19999 € 0 €
C De 20000 € até 29999 € 150 €
B De 30000 € até 60000 € 400 €
A Mais de 60000 € 1,5 %
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 83 de 202
c) Por fim, e com o objetivo de promover o desempenho nas atividades de cobrança, o chefe de
vendas distingue cada vendedor com uma nota qualitativa que representa prémios ao fim de
cada mês. Melhore o algoritmo anterior para fazer face a esta distinção (note que a nota deve
pode ser inserida através do seu código ou da sua descrição).
Prémio  Nota 1 MAU 2 REGULAR 3 BOM 4 EXCELENTE
Um jantar 2 3 3 3
Um fim-de-semana 2 2 2 3
Viagem à Madeira 2 2 3 2
Viagem ao Brasil 2 2 2 3
[03] – Numa determinada empresa há a necessidade de criar uma aplicação que identifique o tipo de
cliente em função do seu volume de compras anual (ver quadro seguinte).
TIPO CLIENTE ATÉ (inclusive)
NORMAL 5.000,00 €
PROFISSIONAL 20.000,00 €
EMPRESARIAL 999.999,99 €
a) Desenvolva um algoritmo capaz de automatizar esta identificação e, de seguida, sugira uma
implementação.
[04] – Uma loja de venda de animais pretende criar uma aplicação que automatize o processo de cálculo
de PVP (preços de venda a publico). A margem a ser praticada varia em função da família dos artigos
vendidos, (conforme tabela seguinte).
CÓDIGO FAMILIA MARGEM
1 COBRAS 3,0 %
4 RATOS 4,0 %
9 CAES 2,5 %
a) Desenvolva um algoritmo capaz de automatizar esta identificação, de forma a mostrar o PVP
de um artigo com e sem IVA (23%) atendendo à família a que pertence. Implemente-o.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 84 de 202
3.8. INSTRUÇÕES DE REPETIÇÃO
Até este momento, os exemplos e exercícios apresentados, são compostos apenas por uma sequência de
instruções, que são executadas pela ordem em que foram dispostas e apenas uma única vez.
As instruções de repetição, vulgarmente conhecidas por ciclos, permitem a execução repetitiva de uma
sequência de instruções. A execução de um ciclo é controlada através do valor lógico de uma condição
que é testada a cada iteração e que, desta forma, decide se uma nova iteração deve ou não acontecer.
Um dos aspetos mais importantes a ter em conta na definição de um ciclo é a condição de paragem
(também chamada de sentinela). Caso seja mal planeada, pode conduzir o fluxo de execução a um ciclo
infinito, dando a sensação ao utilizador que a aplicação deixou de responder. Para que este problema
nunca ocorra, a lógica criada pelo programador deve garantir que, algures durante a execução, a condição
de paragem aconteça algures no fluxo de execução.
Nesta secção são apresentadas várias estruturas de repetição. Note-se que, apesar de todas elas
permitirem a execução de ciclos, a forma de os controlar varia de estrutura para estrutura, fazendo com
que uma estrutura seja mais adequada para determinadas realidades do que outras.
3.8.1. REPETIR… ATÉ
Este ciclo permite executar um bloco de instruções até que uma determinada condição lógica seja
verdadeira, ou seja, enquanto a avaliação da condição resultar no valor lógico - falso, o ciclo continuará a
executar.
Nesta estrutura de repetição, a condição que determina uma nova iteração (que decide se o ciclo deve
ou não continuar), é avaliada no final de cada iteração. Isto significa que, pelo menos a primeira iteração
será sempre executada já que a primeira avaliação é feita precisamente após essa primeira execução.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 85 de 202
Figura 75 - Instrução de repetição Repetir... Até
Em linguagem algorítmica, usa-se o termo repetir para indicar o início do bloco de instruções a
executar repetidamente e o termo até para especificar a condição a ser avaliada no final de cada iteração
e que decide se deve ou não ocorrer uma nova iteração, ou seja, se o ciclo deve ou não continuar (ver
imagem anterior).
Em linguagem C e C#, usa-se a palavra reservada do para iniciar o bloco e while para definir a condição
a ser avaliada. De seguida é apresentado um problema onde é usado esta instrução.
De notar que, enquanto que em linguagem algorítmica a condição até a falso continua a execução do
ciclo, em C e C#, é definido um valor verdadeiro na condição while para que o ciclo continue.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 86 de 202
PROBLEMA
Pretende-se uma aplicação que, perante várias inserções de números naturais (N0) pelo utilizador, calcule
a quantidade de números pares inseridos (considerar o zero não válido como par).
SOLUÇÃO
As imagens seguintes apresentam uma sugestão de resolução do problema.
Figura 76- Aplicação de Repetir... até... na solução de um problema em VisuAlg (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 87 de 202
Figura 77 - Implementação de Repetir... até... na solução de um problema em linguagem C (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 88 de 202
Figura 78 - Implementação de Repetir... até... na solução de um problema em linguagem C# (1)
PROBLEMA
Um centro comercial pretende adequar um pouco mais a decoração do seu espaço de lazer e de
alimentação à faixa etária dos seus visitantes. Para isso, no próximo fim-de-semana, irá recolher
informação das pessoas que lá entram, com o objetivo de determinar:
x O número total de visitantes femininos e masculinos
x O número de visitantes com idade compreendida entre os 10 e 16 anos e os 16 e 24 anos.
SOLUÇÃO
As imagens seguintes apresentam uma sugestão de resolução do problema em linguagem algorítmica e
uma proposta de implementação.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 89 de 202
Figura 79 - Aplicação de Repetir... até... na solução de um problema em VisuAlg (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 90 de 202
Figura 80 - Implementação de Repetir... até... na solução de um problema em linguagem C (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 91 de 202
Figura 81 - Implementação de Repetir... até... na solução de um problema em linguagem C# (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 92 de 202
3.8.2. ENQUANTO… FAZER
Este ciclo permite a execução de um bloco de instruções, enquanto que a condição lógica seja avaliada
como verdadeira, por outras palavras, quando a avaliação da condição resultar num valor lógico de falso,
o ciclo é abandonado e a execução continua na linha imediatamente a seguir ao fim do ciclo.
A diferença principal desta estrutura de repetição para a estrutura Repetir… Até… é o facto de a
avaliação que determina a continuidade de execução do ciclo, ser efetuada antes de cada iteração e não
no final. Esta diferença faz com que o número mínimo de execuções do ciclo seja zero, ou seja, pode
acontecer que o ciclo não chegue a executar vez nenhuma, caso a condição seja avaliada como falsa logo
antes da primeira iteração.
O ciclo equivalente em C e C# é o while que é seguido imediatamente da condição que determina a
execução ou não do ciclo. Caso a condição seja avaliada como verdadeira é executada nova iteração, ou
seja, é executado o bloco de instruções delimitado pelas chavetas que lhe seguem.
Figura 82 - Instrução de repetição Enquanto… Fazer…
PROBLEMA
O organismo público responsável pela meteorologia em Portugal necessita de fazer um estudo acerca da
temperatura na cidade do Porto. Crie uma aplicação capaz de recolher durante n dias a temperatura, e
no final, informar qual o pico de calor ocorrido, assim como a média das temperaturas recolhidas. Em
cada dia apenas será efetuada uma única recolha.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 93 de 202
SOLUÇÃO
De seguida é apresentada uma proposta de solução.
Figura 83 - Aplicação de Enquanto... Fazer... na solução de um problema em VisuAlg (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 94 de 202
Figura 84 - Implementação de Enquanto... Fazer... na solução de um problema em linguagem C (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 95 de 202
Figura 85 - Implementação de Enquanto... Fazer... na solução de um problema em linguagem C# (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 96 de 202
PROBLEMA
A Associação de estudantes de Escola Secundária “Só Crânios” está a organizar um concurso de
matemática com o objetivo de encontrar os 3 melhores alunos à disciplina.
A equipa organizadora do concurso necessita de uma aplicação que faça as inscrições de alunos, através
da recolha do nome e da nota de 11º ano a matemática.
O número de alunos inscritos no concurso nunca poderá ser inferior a 5 e superior a 10. No entanto, as
inscrições terminam se a média das notas dos alunos inscritos atingir os 18 valores, desde que cumprido
o preceito do mínimo de 5 alunos inscritos.
Caso um candidato tenha nota inferior a 14 valores, a sua inscrição é automaticamente recusada.
SOLUÇÃO
De seguida é apresentada uma proposta de solução que termina mostrando os alunos inscritos.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 97 de 202
Figura 86 - Aplicação de Enquanto... Fazer... na solução de um problema em VisuAlg (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 98 de 202
Figura 87 - Implementação de Enquanto... Fazer... na solução de um problema em linguagem C (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 99 de 202
Figura 88 - Implementação de Enquanto... Fazer... na solução de um problema em linguagem C# (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 100 de 202
3.8.3. PARA… FAZER
Este ciclo executa um bloco de instruções um numero pré-determinado de vezes. Como é facilmente
percetível, o para… fazer… é bastante usado em situações que, à partida, é conhecido ou calculável o
numero de iterações a ser executado pelo ciclo.
Como mostra a imagem a seguir, a sintaxe deste ciclo inclui (além do bloco de instruções a ser executado
caso a iteração ocorra):
x Bloco início - com as instruções a serem executadas antes da primeira iteração;
x Condição – expressão lógica testada a cada iteração e que, para haver lugar a nova iteração, tem
que ser avaliada como verdadeira;
x Bloco iteração – que é um bloco que é executado no final de cada iteração;
Figura 89 - Instrução de repetição Para... Fazer...
Em C e C#, este ciclo é implementado iniciando-se com a instrução for seguido (entre parêntesis e
separados por pontos e virgulas) do bloco de início, da condição de avaliação que terá que ser avaliada
como verdadeiro para haver lugar a nova iteração e, por fim, o bloco que é executado no final de cada
iteração.
De seguida é apresentado um problema onde a escolha do ciclo for como estrutura de repetição parece
natural.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 101 de 202
PROBLEMA
Desenvolva um programa capaz de calcular o fatorial de um dado numero (ver formula seguinte).
SOLUÇÃO
De seguida é apresentada uma proposta de solução.
Figura 90 - Aplicação de Para... Fazer... na solução de um problema em VisuAlg (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 102 de 202
Figura 91 - Implementação de Para... Fazer... na solução de um problema em linguagem C (1)
Figura 92 - Implementação de Para... Fazer... na solução de um problema em linguagem C# (1)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 103 de 202
PROBLEMA
Desenvolva um programa capaz de gerar e apresentar ao utilizador 10 números inteiros aleatórios entre
0 e 100.
SOLUÇÃO
De seguida é apresentada uma proposta de solução.
Figura 93 - Aplicação de Para... Fazer... na solução de um problema em VisuAlg (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 104 de 202
Figura 94 - Implementação de Para... Fazer... na solução de um problema em linguagem C (2)
Figura 95 - Implementação de Para... Fazer... na solução de um problema em linguagem C# (2)
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 105 de 202
3.8.4. EXERCICIOS (FICHA Nº 3)
[01] – Há a necessidade de criar uma aplicação que, perante a introdução de dois limites inteiros, calcule
a quantidade e o somatório de todos os valores ímpares nesse intervalo. Note que os limites do intervalo
podem ser inseridos no menor para o maior ou do maior para o menor.
a) Desenhe um algoritmo que resolva o problema usando o ciclo para… fazer… e, de seguida,
implemente-o usando o ciclo for.
b) Desenhe e implemente a mesma solução anterior usando desta vez o ciclo enquanto…
fazer…
c) Por fim, desenhe e implemente a mesma solução usando o ciclo repetir… até…
[02] – Um número é primo se apenas for divisível por, exatamente, 4 números (2 positivos e 2 negativos).
Por exemplo, o número 11 é primo porque apenas é divisível por {11, 1, -1, -11}. Já o número 21 não é
primo porque é divisível por {21, 7, 3, 1, -1, -3, -7, -21}.
a) Desenhe um algoritmo capaz de validar se um determinado numero inteiro inserido pelo
utilizador é ou não primo.
b) Evolua o algoritmo anterior de forma a indicar os divisores responsáveis pelo facto de um
determinado numero não ser primo.
[03] – A secretaria de uma escola necessita de uma aplicação que permita calcular a média, nota máxima
e mínima de uma turma à disciplina de Geometria. A aplicação deve receber o número de alunos
existentes e solicitar as notas apenas para essa quantidade de estudantes.
a) Desenhe um algoritmo que resolva o problema e implemente-o de seguida.
b) Evolua o algoritmo anterior e respetiva implementação, para que o número de alunos não
tenha que ser comunicado num momento prévio ao processamento. Use como condição de
paragem a inserção de uma nota acima dos 20 valores.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 106 de 202
[04] – Considere a seguinte aplicação (ver imagem seguinte) que pretende encontrar, numa fila de 7
pessoas, aquela que apresente idade mais baixa. Caso seja encontrada alguma pessoa cuja idade seja
igual ou inferior a 6 anos, automaticamente essa será a pessoa vencedora. Em caso de empate, deve ser
considerada a primeira pessoa encontrada com a idade vencedora.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 107 de 202
a) Analise o código da imagem e comente a solução por ele implementada. Apresente
correções/melhorias ao algoritmo e implemente-o.
b) Que alterações teria que efetuar no algoritmo, caso se pretendesse que, em caso de empate,
fosse o ultima pessoa com essa idade a vencer.
c) Evolua o algoritmo anterior para que o número de pessoas da fila seja ilimitado até ser
inserido o nome “PARAR”.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 108 de 202
[05] – São várias as formas como uma aplicação pode indicar ao utilizador as funcionalidades que oferece.
Na imagem seguinte é apresentado um pequeno menu que permite ao utilizador acesso a funcionalidades
de terceiros.
a) Implemente uma solução que permita a navegação nas opções. A aplicação deve apenas
terminar quando pressionada a letra “s” e, quando selecionada qualquer uma das restantes
opções, deve apenas indicar uma linha especificando a opção escolhida.
[06] – Analise a imagem seguinte que contem um bloco de código. Resuma os erros que encontra
justificando a sua resposta.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 109 de 202
[07] – Um intervalo de inteiros pode ser representado através de um conjunto de elementos. É necessário
criar uma aplicação, capaz de receber um intervalo definido pelo utilizador (intervalo fechado) e de
apresentar os respetivos valores em formato de conjunto. Pretende-se conhecer também a soma dos
inteiros contidos nesse conjunto.
a) Desenhe um algoritmo capaz de responder a este problema usando um ciclo de repetição
Para… Fazer… e, de seguida, implemente-o.
b) Construa uma segunda versão da mesma solução, usando o ciclo Enquanto… Fazer…
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 110 de 202
[08] – Aproveitando o facto de um programa conseguir gerar números aleatórios, é possível criar um jogo
para adivinhar um desses números. Não esqueça as dicas ao utilizador para saber se o número é maior
ou menor.
a) Desenhe o algoritmo do jogo e implemente-o.
b) Evolua o algoritmo anterior no sentido de ter os seguintes 3 níveis de dificuldade:
NIVEL INTERVALO TENTATIVAS
1) Iniciante [1:10] 3
2) Medio [1:30] 10
3) Experiente [1:50] 15
[09] – Analise a forma geométrica apresentada na imagem seguinte, desenhada por uma aplicação do
tipo consola.
a) Crie um algoritmo que desenhe um quadrado, em que o tamanho do lado e o caracter de
preenchimento são dados inseridos pelo utilizador. Implemente.
b) Evolua o algoritmo anterior de forma a permitir também desenhar retângulos (dois lados
indicados pelo utilizador).
c) Evolua ainda o mesmo algoritmo, para que apenas as arestas sejam desenhadas, ou seja, a
forma não tenha preenchimento.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 111 de 202
[10] – A imagem seguinte apresenta um triângulo desenhado numa aplicação do tipo consola.
a) Desenhe o algoritmo que desenhe o triângulo na consola e implemente-o.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 112 de 202
3.9. TRAÇAGENS E TESTE
Fazer uma traçagem consiste em testar um algoritmo para um conjunto de valores de entrada definido à
partida. A traçagem permite observar o comportamento interno do algoritmo, à medida que o fluxo de
execução das instruções que o compõem ocorre.
A preparação de uma traçagem consiste em etiquetar (numerar por exemplo) os passos de execução do
algoritmo. De seguida, constrói-se uma tabela usando como cabeçalhos das colunas, as variáveis e
condições (avaliações) que se pretendem analisar durante a execução. Por fim, já na traçagem
propriamente dita, será possível registar na tabela os valores assumidos por cada variável a cada passo e
assim, entender melhor as avaliações efetuadas às condições no decurso do algoritmo.
Resumindo, usam-se as traçagens para analisar analiticamente o funcionamento de um algoritmo.
3.9.1. EXEMPLOS
O cálculo do quociente e resto de uma divisão inteira pode ser conseguido através de subtrações
sucessivas, como mostrado na imagem seguinte que pretende calcular o quociente e resto de 33/7.
Figura 96 - Calcular o quociente e resto pelo método das subtrações sucessivas
O quociente corresponde ao número de vezes para qual é possível subtrair o divisor ao dividendo. No
exemplo apresentado na imagem o divisor 7 pode ser 4 vezes subtraído do dividendo 33, fazendo com
que o quociente (divisão inteira) seja precisamente 4 e o resto, ou seja, o que sobra depois de subtraídos
todos os 7 possíveis, é 5.
De seguida é apresentada uma sugestão para resolução deste problema, num primeiro momento em
linguagem algorítmica (usando o VisuAlg) e depois com implementação da mesma solução.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 113 de 202
Figura 97 - Proposta de solução em VisuAlg
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 114 de 202
Figura 98 - Proposta de implementação em C
Figura 99 - Proposta de implementação em C#
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 115 de 202
Perante este algoritmo / implementação, é possível efetuar uma traçagem para analisar (testar) mais
analiticamente o comportamento do fluxo de instruções. O quadro seguinte pretende mostrar a traçagem
da implementação.
PASSO DIVIDENDO DIVISOR QUOCIENTE RESTO DIVIDENDO >= DIVISOR
01 0
02 33 0
03 33 7 0
04 33 7 0 33 >= 7 (verdade)
05 26 7 0 33 >= 7 (verdade)
06 26 7 1 33 >= 7 (verdade)
07 26 7 1 26 >= 7 (verdade)
08 19 7 1 26 >= 7 (verdade)
09 19 7 2 26 >= 7 (verdade)
10 19 7 2 19 >= 7 (verdade)
11 12 7 2 19 >= 7 (verdade)
12 12 7 3 19 >= 7 (verdade)
13 12 7 3 12 >= 7 (verdade)
14 5 7 3 12 >= 7 (verdade)
15 5 7 4 12 >= 7 (verdade)
16 5 7 4 5 >= 7 (falso)
17 5 7 4 5
Na prática, a demorada tarefa de efetuar uma traçagem, permite aferir acerca da correta atribuição de
valores às variáveis e assim, analisar de forma facilitada o evoluir do fluxo de execução de um algoritmo.
A traçagem é muitas vezes usada quando se pretende analisar um algoritmo complexo ou um erro de
lógica difícil de detetar.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 116 de 202
3.10. MODULARIZAÇÃO (ORGANIZAÇÃO DE CÓDIGO)
3.10.1. CONTEXTUALIZAÇÃO (CAMADAS, COMPONENTES E SUB-ROTINAS)
A programação através de módulos pressupõe a divisão do código em unidades de organização fáceis de
gerir e localizar pelos programadores.
Até este momento, apenas foram mostrados e propostos exercícios de tamanho bastante reduzido, com
o objetivo de introduzir o tema dos algoritmos e de programação. No entanto, na produção real de
software, as aplicações contém milhares e até milhões de linhas de código e se não houver uma estratégia
adequada à organização do código, mais cedo ou mais tarde, a evolução e manutenção das soluções será
uma tarefa demorada, complexa e, no limite, até impossível de concretizar.
A modularização do código oferece bastantes vantagens, destacando entre elas:
x A criação de várias camadas especializadas de código no mesmo programa, viabilizando a
concretização de projetos mais complexos, tipicamente de leitura e manutenção mais alargada e
complexa. Com a implementação do código em camadas, fica facilitado o desenvolvimento em
equipa, permitindo a atribuição de tarefas de programação individuais com fronteiras bem
delineadas (exemplo: base de dados, camada de acesso aos dados, camada de regras de negócio,
camada de programação Windows Applications, camada de programação para Web, camada de
programação para mobile, etc.);
x Reduzir custos de desenvolvimento já que o desenvolvimento dos módulos é objetivamente
atribuído a uma equipa ou programador;
x Facilitar os processos de correção de erros já que, conhecido o erro, é mais fácil identificar a
camada onde reside;
x Reduzir o número de erros resultantes do processo de codificação, porque as equipas poderão
testar as funcionalidades por si desenvolvidas, de forma totalmente isolada dos módulos
desenvolvidos pelos seus colegas. Quando uma equipa entrega o seu trabalho, testou-o num
ambiente de testes unitários;
x Reutilização de código através de sub-rotinas, ou seja, desenvolver funcionalidades não
especificas para um bloco de código mas gerais de forma a poderem ser consumidas noutros
pontos da mesma aplicação ou até noutras aplicações.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 117 de 202
3.10.2. SUB-ROTINAS
A programação com recurso a sub-rotinas (pequena unidade de código) permite encapsular
processamento e, desta forma, os programas ficam mais simples de desenvolver e de evoluir. Quanto
mais independentes forem as sub-rotinas (módulos), mais atentamente o programador se pode
concentrar em cada pequeno problema individual ignorando temporariamente os restantes.
Quando num determinado ponto de código se faz uma chamada a uma sub-rotina, o controlo do
programa é transferido para essa sub-rotina, ou seja, as próximas instruções a serem executadas são as
constantes nessa sub-rotina. Uma vez terminada a sua execução, o controlo do programa é devolvido ao
bloco que havia solicitado a execução da rotina agora terminada e continua na instrução imediatamente
a seguir.
Na programação estruturada são normalmente referidas dois tipos de sub-rotinas:
x Funções – são sub-rotinas que, depois de executadas, conseguem retornar um valor ao bloco de
instruções que a chamou em primeiro lugar. Funcionam como uma caixa preta, que se
desconhece o conteúdo, mas que tem a capacidade de receber valores (designados por
parâmetros ou argumentos) e devolver no final um resultado. As funções em linguagem
estruturada e nas linguagens de programação tem um funcionamento similar às funções
matemáticas como o seno ou raiz quadrada que, perante a comunicação de um valor
(argumento), retorna um outro (resultado)
x Procedimentos – são sub-rotinas muito parecidas com as funções, mas que não retornam
qualquer valor quando terminam a execução, melhor dito, retornam um valor “nada”. Apesar
desta característica, conseguem receber argumentos como as funções.
As sub-rotinas necessitam de valores para processar e, a forma correta de lhes transmitir esses valores é
através do uso de parâmetros. Apesar de ser possível uma sub-rotina processar com base em variáveis de
âmbito global (o âmbito das variáveis será apresentado de seguida), tal não é considerado uma boa
prática.
ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO
Página 118 de 202
3.10.3. ÂMBITO DAS VARIÁVEIS
As variáveis definidas no contexto de uma sub-rotina (função ou procedimento), são criadas no momento
em que se inicia a execução dessa sub-rotina e destruídas no momento em que a sub-rotina termina. São
conhecidas como variáveis locais pelo facto de serem apenas visíveis (acessíveis) pelo bloco de código
que constitui a sub-rotina.
De salientar que existem variáveis com âmbito mais abrangente, ou seja, variáveis possíveis de serem
acedidas em todo o programa – são chamadas de variáveis globais. No entanto, a forma correta de passar
valores para dentro de uma sub-rotina, deve ser através de parâmetros e não usando variáveis globais,
da mesma forma que, para obter resultados de uma sub-rotina deve ser usada uma função em vez de um
procedimento, já que a primeira tem a hipótese de retornar um valor.
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf
Apontamentos.pdf

Mais conteúdo relacionado

Semelhante a Apontamentos.pdf

Semelhante a Apontamentos.pdf (20)

Conceitos e técnicas de programação apostilha algoritmo
Conceitos e técnicas de programação apostilha algoritmoConceitos e técnicas de programação apostilha algoritmo
Conceitos e técnicas de programação apostilha algoritmo
 
Visu alg ref
Visu alg refVisu alg ref
Visu alg ref
 
Apostila visualgv25
Apostila visualgv25Apostila visualgv25
Apostila visualgv25
 
VisualAlg - Criando algoritmos
VisualAlg - Criando algoritmosVisualAlg - Criando algoritmos
VisualAlg - Criando algoritmos
 
Apostila algoritmos mar2007
Apostila algoritmos mar2007Apostila algoritmos mar2007
Apostila algoritmos mar2007
 
Linguagem visualg2.0
Linguagem visualg2.0Linguagem visualg2.0
Linguagem visualg2.0
 
Algoritmos visualg
Algoritmos visualgAlgoritmos visualg
Algoritmos visualg
 
Algoritmos e linguagem pascal
Algoritmos e linguagem pascalAlgoritmos e linguagem pascal
Algoritmos e linguagem pascal
 
Algoritmos e linguagem pascal
Algoritmos e linguagem pascalAlgoritmos e linguagem pascal
Algoritmos e linguagem pascal
 
Apostila de informatica para concursos atualizada
Apostila de informatica para concursos atualizadaApostila de informatica para concursos atualizada
Apostila de informatica para concursos atualizada
 
Apostila s7
Apostila s7Apostila s7
Apostila s7
 
Visualg primeira interação
Visualg   primeira interaçãoVisualg   primeira interação
Visualg primeira interação
 
Linguagem visualg2.0
Linguagem visualg2.0Linguagem visualg2.0
Linguagem visualg2.0
 
Apostila de Introdução a Programação
Apostila de Introdução a ProgramaçãoApostila de Introdução a Programação
Apostila de Introdução a Programação
 
Apostila visualg
Apostila visualgApostila visualg
Apostila visualg
 
Algoritimo1
Algoritimo1Algoritimo1
Algoritimo1
 
apostila sobre Algoritmos
apostila sobre Algoritmosapostila sobre Algoritmos
apostila sobre Algoritmos
 
Visual g
Visual gVisual g
Visual g
 
Linguagemvisualg20 1231617059100335-1
Linguagemvisualg20 1231617059100335-1Linguagemvisualg20 1231617059100335-1
Linguagemvisualg20 1231617059100335-1
 
Visualg introdução aos algoritmos
Visualg introdução aos algoritmosVisualg introdução aos algoritmos
Visualg introdução aos algoritmos
 

Último

Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfRavenaSales1
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaHELENO FAVACHO
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxedelon1
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTailsonSantos1
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...HELENO FAVACHO
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfHELENO FAVACHO
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxLusGlissonGud
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSOLeloIurk1
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptssuser2b53fe
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...IsabelPereira2010
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxTailsonSantos1
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãIlda Bicacro
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfprofesfrancleite
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 

Último (20)

Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdfGEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
GEOGRAFIA - COMÉRCIO INTERNACIONAL E BLOCOS ECONÔMICOS - PROF. LUCAS QUEIROZ.pdf
 
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia TecnologiaPROJETO DE EXTENSÃO I - Radiologia Tecnologia
PROJETO DE EXTENSÃO I - Radiologia Tecnologia
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptxSlide - EBD ADEB 2024 Licao 02 2Trim.pptx
Slide - EBD ADEB 2024 Licao 02 2Trim.pptx
 
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptxTeoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
Teoria heterotrófica e autotrófica dos primeiros seres vivos..pptx
 
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
PROJETO DE EXTENSÃO I - TECNOLOGIA DA INFORMAÇÃO Relatório Final de Atividade...
 
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdfProjeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
Projeto_de_Extensão_Agronomia_adquira_ja_(91)_98764-0830.pdf
 
Apresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptxApresentação em Powerpoint do Bioma Catinga.pptx
Apresentação em Powerpoint do Bioma Catinga.pptx
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
aula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.pptaula de bioquímica bioquímica dos carboidratos.ppt
aula de bioquímica bioquímica dos carboidratos.ppt
 
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
DeClara n.º 75 Abril 2024 - O Jornal digital do Agrupamento de Escolas Clara ...
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
Os editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptxOs editoriais, reportagens e entrevistas.pptx
Os editoriais, reportagens e entrevistas.pptx
 
Construção (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! SertãConstrução (C)erta - Nós Propomos! Sertã
Construção (C)erta - Nós Propomos! Sertã
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdfPRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
PRÉDIOS HISTÓRICOS DE ASSARÉ Prof. Francisco Leite.pdf
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 

Apontamentos.pdf

  • 1. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO this.GetStarted() programar não se estuda… pratica-se, não se aprende… explora-se e investiga-se Luís Ferreira, João C. Silva, Patrícia Leite, Marta Martinho e Célio Carvalho 2015.nov, v0.9.8
  • 2. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 2 de 202
  • 3. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 3 de 202 INDICE 1. INTRODUÇÃO E CONCEITOS BÁSICOS 5 1.1. HARDWARE VS. SOFTWARE 5 1.2. APRESENTAÇÃO DA ALGORITMIA 6 1.3. LINGUAGENS DE PROGRAMAÇÃO 11 1.4. TIPOS DE INSTRUÇÃO (SEQUÊNCIA, DECISÃO E REPETIÇÃO) 16 1.5. TIPOS DE NOTAÇÃO DE ALGORITMOS (PSEUDO-CÓDIGO E FLUXOGRAMA) 17 2. APRESENTAÇÃO DE FERRAMENTAS 21 2.1. VISUALG 2.0 21 2.2. MICROSOFT VISUAL STUDIO 22 2.2.1. TIPOS DE PROJETOS (PRINCIPAIS) 22 2.3. DEV C++ (BLOODSHED) 24 3. ALGORITMOS EM PSEUDO-CÓDIGO 25 3.1. REGRAS, TERMINOLOGIAS E ESTRUTURA DOS ALGORITMOS 25 3.2. CONSTANTES E VARIÁVEIS 27 3.3. TIPOS DE DADOS 32 3.4. OPERADORES MATEMÁTICOS 37 3.5. OPERADORES LÓGICOS E RELACIONAIS 45 3.6. INSTRUÇÕES DE SEQUÊNCIA 50 3.6.1. ATRIBUIÇÃO 50 3.6.2. ENTRADA/SAÍDA DE DADOS (LER E ESCREVER) 52 3.6.3. EXERCÍCIOS (FICHA Nº 1) 58 3.7. INSTRUÇÕES DE DECISÃO 61 3.7.1. SE.. ENTÃO… SENÃO…. 62 3.7.2. SELECIONAR… CASO1… CASO(N)… SENÃO…. 70 3.7.3. EXERCÍCIOS (FICHA Nº 2) 82 3.8. INSTRUÇÕES DE REPETIÇÃO 84 3.8.1. REPETIR… ATÉ 84 3.8.2. ENQUANTO… FAZER 92 3.8.3. PARA… FAZER 100 3.8.4. EXERCICIOS (FICHA Nº 3) 105 3.9. TRAÇAGENS E TESTE 112 3.9.1. EXEMPLOS 112 3.10. MODULARIZAÇÃO (ORGANIZAÇÃO DE CÓDIGO) 116 3.10.1. CONTEXTUALIZAÇÃO (CAMADAS, COMPONENTES E SUB-ROTINAS) 116 3.10.2. SUB-ROTINAS 117
  • 4. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 4 de 202 3.10.3. ÂMBITO DAS VARIÁVEIS 118 3.10.4. FUNÇÕES 119 3.10.5. PROCEDIMENTOS 127 3.10.6. PARAMETROS OU ARGUMENTOS 135 3.10.7. EXERCÍCIOS (FICHA Nº4) 143 3.11. VETORES 145 3.11.1. CONTEXTUALIZAÇÃO E EXEMPLOS 145 3.11.2. VETORES DO PONTO DE VISTA DA MEMÓRIA 153 3.11.3. ORDENAÇÃO 157 3.11.4. PESQUISA 161 3.11.5. STRINGS EM C (ARRAY ESPECIAL) 165 3.11.6. EXERCÍCIOS (FICHA Nº5) 177 3.11.7. MATRIZES 179 3.11.8. EXERCÍCIOS (FICHA Nº 6) 185 3.12. REGISTOS 186 3.12.1. CONTEXTUALIZAÇÃO (TIPOS DE DADOS COMPOSTOS) 186 3.12.2. EXERCÍCIOS (FICHA Nº 7) 196 4. SOLUÇÕES DE EXERCICIOS 199 4.1. FICHA 1 EXERCICIO 5 ALINEA A) 199 4.2. FICHA 1 EXERCICIO 5 ALINEA B) 199 4.3. FICHA 3 EXERCICIO 4 ALINEA A) 201 4.4. FICHA 3 EXERCICIO 4 ALINEA A) 201 4.5. FICHA 3 EXERCICIO 6 202
  • 5. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 5 de 202 1. INTRODUÇÃO E CONCEITOS BÁSICOS Esta sebenta pretende apoiar os alunos a iniciarem a sua aventura na área da algoritmia e da programação. Pretende-se estimular os alunos a desenvolver as capacidades necessárias à aplicação da lógica e raciocínio, ao serviço do desenvolvimento de aplicações informáticas. Houve uma grande preocupação em abordar os temas de forma simples e direta. Cada assunto é devidamente documentado com casos exemplo e, para cada um, é apresentada uma proposta de algoritmo e de implementação. Com o objetivo de iniciar a familiarização dos alunos com várias linguagens de programação e até analisar a sua semelhança, poderão haver propostas de implementação paralelas em várias linguagens como C, C# e JAVA. Neste capítulo inicial, serão abordados alguns conceitos básicos e terminologias que permitirão entender melhor os temas apresentados nos restantes capítulos deste manual. 1.1. HARDWARE VS. SOFTWARE A palavra informática resulta da união de (infor)mação auto(mática), ou seja, significa o tratamento da informação através de meios automáticos e, o mais importante e conhecido meio de tratamento automático de informação, é o computador. O computador é um conjunto de componentes eletrónicos e circuitos elétricos que, no seu conjunto, conseguem executar tarefas por obediência a um programa armazenado no seu interior. Neste contexto, o computador é facilmente descrito como composto por dois grandes tipos de componentes: x Hardware – engloba todos os componentes palpáveis ou com corpo físico e que permite executar instruções precisas a determinada velocidade, armazenar dados e comunicar com periféricos; x Software – que tem a função de ordenar as componentes físicas do hardware, ou seja é a componente lógica do computador que tem a capacidade de comandar de forma coordenada os diferentes componentes físicos para que executem de forma contextualizada. A componente de software é a aquela que mais nos interessa no âmbito deste manual. No entanto, devido à sua enorme diversidade e aplicabilidade, será também ele dividido em grupos ou tipos de software: x Sistemas Operativos – composto por um conjunto de programas que consegue comunicar com o hardware e que são responsáveis pela gestão de periféricos e demais recursos físicos.
  • 6. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 6 de 202 x Ferramentas de desenvolvimento – onde se enquadram todas as aplicações que permitem criar outras aplicações. Neste conjunto incluem-se os compiladores e aplicações que facilitam o desenvolvimento mais cómodo ao ser humano. x Aplicações – que representa o grupo de programas usados pelo utilizador do sistema. Neste grupo incluem-se os programas feitos à medida do cliente, editores de texto, folhas de cálculo, etc. No que diz respeito ao tema tratado nesta sebenta, serão usadas várias ferramentas de desenvolvimento com o objetivo de criar algumas pequenas aplicações que poderão, depois de compiladas, ser consumidas pelo utilizador final. 1.2. APRESENTAÇÃO DA ALGORITMIA Programar um computador, seria muito mais simples se fosse possível dar-lhe instruções do género “calcule a média aritmética da turma à disciplina de inglês e escreva-a no ecrã…”. No entanto, tal não é possível, já que se trata de uma instrução ambígua e demasiado simplista, faltando todo o detalhe e sequência das operações necessárias à resolução do cálculo em causa. Para que uma aplicação consiga executar uma operação aparentemente tão simples como esta, é necessário disponibilizar toda a informação acessória ao cálculo, como as notas, equação para chegar à média, como apresentar e formatar o resultado encontrado, etc. O procedimento que está por detrás do cálculo da média poderá ser descrito, muito grosso modo, com a seguinte sequência de operações: 1. Recolher/conhecer as notas; 2. Somar as notas recolhidas; 3. Dividir a soma obtida no ponto anterior pelo número de notas; 4. Escrever o resultado obtido no ponto anterior no ecrã; Em programação, este tipo de procedimentos são chamados de algoritmos e, apesar de poderem também ser escritos em texto fácil de ler e interpretar, contém um pouco mais de detalhe, devido à natureza exata subjacente e também porque servem de base aos programadores no momento da implementação. Mais à frente neste manual, serão abordados com mais pormenor os algoritmos escritos em linguagem próxima do natural (linguagem estruturada ou pseudo-código), assim como os algoritmos escritos através de fluxogramas.
  • 7. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 7 de 202 Um algoritmo pode então ser visto como uma forma de partir o problema inicial em problemas mais pequenos e assim, uma forma de facilitar o processo de encontrar uma solução. Voltando ao caso do cálculo da média, notar que, quando analisados cada um dos quatro problemas individualmente, a sua solução individual é inquestionavelmente mais simples de ser conseguida do que quando analisado o problema total por inteiro. Neste contexto, podemos definir um algoritmo como uma forma de resolver um problema inicial complexo, como um conjunto finito de problemas mais pequenos e, consequentemente, de mais fácil e simples resolução. O algoritmo determinado para a resolução de um problema, pode variar de programador para programador, não havendo assim uma única solução para cada problema. No entanto, é possível identificar um conjunto de ações que podem servir de base ao processo de criação de um algoritmo. A imagem seguinte apresenta graficamente os passos a seguir para a resolução do problema, desde a sua identificação até à implementação da sua solução em código. Para este caso, foi adotada a abordagem top-down com a criação de uma lista ordenada de “coisas a fazer”, similar à usada anteriormente ao cálculo da média. Figura 1 - Procedimento para elaboração de um algoritmo Um algoritmo é formalmente definido como uma sequência finita de passos que levam à execução de uma tarefa. Em informática, a elaboração de um algoritmo corresponde à descrição de forma clara, ordenada e rigorosa, das operações que se pretende que a aplicação execute para produzir determinado resultado.
  • 8. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 8 de 202 Um passo fundamental na criação do algoritmo é entender o problema. Só conhecendo-o total e detalhadamente, será possível chegar a uma boa solução. Existem várias abordagens que podem ser usadas no sentido de conhecer pormenorizadamente um problema e concretizar a sua solução num algoritmo: x Top-down – em que o problema principal é decomposto em problemas mais pequenos, logo mais concretos e simples de resolver. Chama-se top-down pelo facto de partir dos pontos mais gerais do problema em direção aos pontos mais detalhados. x Bottom-up – em que se inicia a análise pelos pontos com maior detalhe em direção ao problema principal (é precisamente o inverso do top-down). x Refinamento progressivo – pode ser visto como um complemento ao top-down em que a descoberta dos problemas mais finos é feita através de um processo iterativo. x Modular – também complementar ao top-down em que a solução é montada sob a forma de módulos, capazes de poderem ser reusados em várias zonas no mesmo algoritmo ou até por outros algoritmos. A decomposição do problema inicial num conjunto de problemas mais pequenos, permite ao analista entender plenamente o problema principal como um todo. Esta lista, pode até ser usada para validar junto do cliente (futuro utilizador) se efetivamente o problema foi corretamente entendido e isto, num momento prévio a todo o processo de especificação e desenvolvimento. Depois do problema percebido, é então iniciada a fase da elaboração do algoritmo. Na prática, criar um algoritmo, não é mais do que adicionar detalhe e lógica para que, depois de implementado, a máquina possa executar e automatizar o processo de chegar à solução. Com o algoritmo criado pode então iniciar-se a fase do desenvolvimento. Esta fase é caracterizada pela implementação do algoritmo na linguagem de programação escolhida. De realçar que o profissional que desenvolve (cria o programa), implementa a lógica de programação criada pelo profissional que criou o algoritmo. Portanto, e neste contexto, uma pergunta importante se coloca – de quem é efetivamente o mérito da solução encontrada para o problema, ou seja, quem é realmente o verdadeiro programador? Será quem cria o algoritmo ou quem o implementa? Outra ideia deixada ainda pela imagem anterior, é o facto de não ser de todo recomendável passar diretamente do conhecimento do problema para a fase do desenvolvimento, saltando portanto a fase da
  • 9. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 9 de 202 análise do problema e da criação do algoritmo. Na realidade, este caminho pode sentenciar o projeto porque muito provavelmente o problema não ficará totalmente resolvido, conduzindo a uma espiral de retificações (também conhecidos por remendos) fazendo com que a fase de desenvolvimento nunca acabe. Cada equipa de programadores cria, implementa e melhora constantemente, o seu próprio ciclo de desenvolvimento. A imagem seguinte apresenta um ciclo genérico que é usado como base por muitas equipas de programação para a criação e evolução do seu próprio ciclo de criação de software. Figura 2 - Ciclo de desenvolvimento genérico Na realidade, passar pela análise do problema e pela elaboração do algoritmo antes da implementação, promove a validação da lógica de programação para cada parte do problema. A consolidação obtida pelas diferentes validações lógicas permite aferir acerca do bom funcionamento de toda a solução em conjunto mesmo antes de escrever a primeira linha de código.
  • 10. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 10 de 202 Iniciar-se o desenvolvimento de imediato sem se analisar separadamente os problemas mais pequenos, é equivalente a ver o problema por inteiro (complexo portanto), acrescido da natural complexidade da implementação na linguagem de programação escolhida. Com o tempo e com a experiência, é natural que os programadores se sintam à vontade para criar o algoritmo e implementá-lo em simultâneo. No entanto, recorrerão sempre à elaboração formal e prévia do algoritmo, quando o problema a resolver seja de maior dimensão ou apresente uma especificidade ou uma complexidade superior à que estão habituados. Nesta fase inicial de aprendizagem, é totalmente aconselhado que os alunos criem sempre os algoritmos antes da implementação. Só desta forma conseguirão desenvolver as suas aptidões de criadores de lógica de programação e garantir o sucesso das aplicações que entretanto desenvolvam.
  • 11. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 11 de 202 1.3. LINGUAGENS DE PROGRAMAÇÃO Uma linguagem de programação pode ser vista como um meio de comunicação entre computadores e os seres humanos que os programam. Pode ser definida como um conjunto de regras sintáticas e semânticas, usadas com o objetivo de definir um programa, ou seja, um conjunto de instruções a serem executadas. Uma linguagem permite que o programador especifique exatamente o que deve ser executado e sob que regras tal deve acontecer. Uma linguagem de programação é então constituída: x Regras de semântica – que definem o conjunto de termos, palavras e símbolos possíveis de usar e que têm um determinado significado para o processador (depois de compilados) x Regras de sintaxe – que definem a forma (ordem) correta para utilização desses termos, palavras e símbolos, ou seja, define o que é uma instrução válida nessa linguagem. O resultado final de uma implementação (desenvolvimento) numa linguagem de programação é chamado de programa ou aplicação. Um programa não é mais do que um conjunto de instruções escritas, que respeitam a semântica e sintaxe definida pelas especificações da linguagem de programação escolhida e que, depois de compiladas, são executadas pelo processador com o objetivo de resolver o problema subjacente à lógica de programação criada pelo profissional que criou o algoritmo agora implementado. Esse algoritmo é a “receita” que foi criada por alguém totalmente “conhecedor em detalhe” do problema a resolver e que, depois de concluído, pode ser desenvolvido numa linguagem de programação com o objetivo de automatizar a processo de resolução do problema. De notar que um programa pode resultar da implementação de um ou mais algoritmos. Dito de outra forma, um problema pode ter (e normalmente tem) uma dimensão tal que implica a especificação através de vários algoritmos e não apenas um. As linguagens de programação podem ser classificadas quanto ao nível de proximidade do programador para com a linguagem entendida pelo computador: x Linguagens de alto nível – define um tipo de linguagem em que o programador define as instruções a serem processadas sem a preocupação de como o processador as executará. Tipicamente estas linguagens têm um vocabulário mais próximo da linguagem humana do que as de médio e baixo nível e contém um conjunto mais alargado de operações possíveis de serem usadas na escrita de um programa.
  • 12. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 12 de 202 x Linguagens de médio nível – define uma classe de linguagens intermédia entre o alto e o baixo nível. A linguagem característica que define esta classe é o C, já que permite trabalhar com registos de sistema e endereços de memória (características típicas das linguagens de baixo nível), mas também permite trabalhar com instruções e operações próximas do ser humano e assim mais próximas da linguagem natural (características que tipicamente definem uma linguagem de alto nível). x Linguagens de baixo nível – que inclui as linguagens em que o programador, além de definir o que pretende ver processado, tem que se preocupar como os pormenores de execução do processador (ex: gestão de memória). Incluem-se neste grupo a linguagem máquina (escrita em bits 0s e 1s) e a linguagem assembly que é formada por instruções em mnemónicas mas mesmo assim, uma linguagem muito próxima da máquina. De notar que, apesar das linguagens de alto nível serem mais fáceis de programar, para serem executadas pelos processadores, tem que estar em linguagem máquina. É aqui que surge o papel dos compiladores que se encarregam de “traduzir” aquilo que os programadores escrevem numa linguagem mais entendível ao ser humano na única possível de ser executada pelos processadores e que depende da sua arquitetura (complexidade abstraída normalmente pelo próprio compilador). EXEMPLO: e = a + b - (c + d) ALGORITMO MÁQUINA ASSEMBLY C, JAVA, C#... s Å c + d 01101001001…. s, ADD c, d s = c + d; r Å b - s 01111001010…. r, SUB b, s r = b – s; e Å a + r 01000010010…. e, ADD a ,r e = a + r; fim 00011010101…. HLP return As linguagens de programação evoluíram muito ao longo dos anos. Nos anos 50 surgiram as primeiras de alto nível das quais se destaca o FORTRAN, sendo que no final dos anos 60 eram já perto de 100, numero que nos dias de hoje ascende aos milhares. Para mais facilmente se conhecer o aparecimento e grau de parentesco entre as linguagens de programação, apresenta-se de seguida uma imagem elucidativa, contendo apenas um excerto das mais conhecidas.
  • 13. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 13 de 202 Como é percetível pela imagem, as linguagens C++, JAVA, C# e Python (as mais usadas no desenvolvimento de aplicações comerciais e no ensino), têm nós de parentesco comuns, o que explica a semelhança nas regras de semântica e de sintaxe. Figura 3 - Evolução de linguagens de programação (algumas) Terminando esta curta introdução às linguagens de programação, salientar que existem três grandes paradigmas ou modelos de desenvolvimento que são, no fundo, diferentes perspetivas ou filosofias de criar aplicações: x Funcional (Haskell) – a parte lógica das soluções é implementada através da definição prévia de funções. Existe uma grande aproximação às aplicações desenhadas através de aplicativos de matemática. x Imperativo (C, Cobol, Pascal, etc.) – em que o código é implementado sob a forma de comandos (ordens) que vão alterando o estado (variáveis) do programa. Um programa criado sob este paradigma é composto por uma sequência de comandos que o computador deve executar na ordem especificada (fazer A, fazer B, fazer C, etc.). É provavelmente o paradigma mais fácil de entender porque é o mais natural ao ser humano pelo facto de estar habituado a receber ordens (instruções) em forma de procedimento.
  • 14. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 14 de 202 x Declarativo (Prolog, Haskell, etc.) – que difere do modelo imperativo pelo facto das aplicações não serem implementadas sob a forma de sequência de instruções que vão alterando o estado global. Em vez disto, em programação declarativa, é definido o que precisa de ser feito, ficando sob a responsabilidade da máquina (linguagem de programação) encontrar a melhor solução para essa solicitação. x Orientado a objetos (C++, JAVA, C#, etc.) – é uma forma de programar com um raciocínio mais próximo de como definimos algo na vida real. Por exemplo o carro 11-AA-22 é um objeto que contém propriedades que o identificam como a marca, modelo e cor (seat, Ibiza, preto), respeitando um modelo definido inicialmente à partida chamado – classe. O quadro seguinte compara algumas das linguagens de programação mais conhecidas quanto ao seu nível, paradigma e modo execução. LINGUAGEM NÍVEL PARADIGMA EXECUÇÃO Assembly Baixo Imperativa Simples Compilada C Médio Imperativa Compilada C++ Médio Imperativa, OO Compilada C# Médio / Alto Imperativa, OO Híbrida Haskell Alto Funcional Interp. / Comp. Java Médio / Alto Imperativa, OO Híbrida Perl Alto Imperativa Interpretada Prolog Alto Declarativa Interpretada Python Alto Imperativa Interpretada Visual Basic .NET Alto Imperativa, OO Híbrida Note-se também a caracterização de cada linguagem quanto ao modo de execução: x Linguagens Compiladas – em que o código digitado pelo programador é transformado (“traduzido”) pelo compilador para uma linguagem máquina de forma a poder ser reconhecido (executado) pelo processador. x Linguagens Interpretadas – define um conjunto de linguagens que não recorrem ao processo de compilação para que o processador consiga entender e executar as instruções. Em substituição deste passo, a própria linguagem inclui mecanismos que são responsáveis, em momento de execução, pela tradução instantânea de cada instrução para que o processador a entenda. Em termos genéricos, podemos afirmar que as aplicações interpretadas tem uma execução um pouco mais lenta, atendendo a este overhead que acontece em momento de execução.
  • 15. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 15 de 202 x Linguagens Híbridas – são linguagens (tipicamente de alto nível) que são simultaneamente do tipo compiladas e interpretadas. A compilação é também um processo de “tradução” mas não para uma linguagem a ser entendida diretamente pelo processador. Em vez disso, a compilação traduz o código para uma linguagem mais próxima da linguagem máquina que, posteriormente e em momento de execução, é interpretada por uma plataforma criada para o efeito que faz a mediação de execução com o processador (ex: framework .Net, Java Virtual Machine)
  • 16. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 16 de 202 1.4. TIPOS DE INSTRUÇÃO (SEQUÊNCIA, DECISÃO E REPETIÇÃO) Na década de 50 e 60, o negócio principal na área da informática era o hardware. No entanto, com aumento enorme das suas características (principalmente a velocidade e capacidade de armazenamento), os clientes começaram a exigir mais fiabilidade e funcionalidade às pequenas e limitadas aplicações que se produziam na altura. Na década de 70 os projetos entregues às equipas de desenvolvimento, eram cada vez de maior dimensão e mais sofisticados, fazendo com que os custos despendidos com software ultrapassassem largamente o custo com hardware. Foi nesta altura que a profissão de programador (vista até à altura um pouco como uma arte já que era feita em linguagens de muito baixo nível) passou a ter a exigência e rigor comparável com uma engenharia. Surgia assim a disciplina de Engenharia de Software que pretendia formar profissionais capazes de produzir software eficiente, fiável, seguro e com custos controlados. A produção de software é feita ao longo de algumas fases (levantamento de requisitos, análise, desenho técnico, implementação, testes, etc.) e, para levar a cabo cada uma destas fases, foram estudados métodos e técnicas. A programação estruturada é precisamente um desses métodos que permite fasear o processo de construção de um programa descrevendo o processo computacional através de um algoritmo. A programação estruturada define um conjunto de regras para a elaboração de um programa e baseia-se na organização em módulos com refinação iterativa. De acordo com este método, qualquer programa pode ser implementado com base em três tipos de estruturas de controlo: x Instruções de sequência – são ordens simples (atómicas), usadas em cálculos, atribuição de valores, leitura e escrita de dados; x Instruções de decisão – também chamadas instruções de seleção que permitem a escolha (decisão) entre vários caminhos de processamento com base em avaliações lógicas de uma condição; x Instruções de repetição – referenciados também como ciclos, permitem a execução de forma repetida de um conjunto de instruções. Cada repetição desse conjunto é chamado de iteração e a decisão acerca de se existe ou não lugar a nova iteração (se a execução do ciclo deve ou não continuar) é da responsabilidade de uma condição, avaliada no início ou no fim de cada iteração. Estas estruturas serão analisadas em detalhe à frente nesta sebenta.
  • 17. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 17 de 202 1.5. TIPOS DE NOTAÇÃO DE ALGORITMOS (PSEUDO-CÓDIGO E FLUXOGRAMA) De uma forma um pouco simplista, podemos dizer que um algoritmo é constituído pelos dados necessários à execução (recebidos e produzidos), e o raciocínio lógico necessário de executar para solucionar o problema. Um algoritmo pode ser descrito de várias formas, e a forma escolhida depende do programador que o cria e também da audiência a quem se destina. Entre os formalismos mais usados, destacam-se: x Pseudo-código – consiste na descrição do algoritmo numa linguagem estruturada mas próxima da linguagem natural (português, inglês, outra). O objetivo é permitir que o programador se possa dedicar (concentrar) na lógica do algoritmo, sem se preocupar com as questões de semântica e sintaxe de uma linguagem de programação. Figura 4 - Estrutura base de um algoritmo em pseudo-código x Fluxograma – consiste na descrição de um algoritmo de forma gráfica, usando para isso um conjunto de símbolos gráficos que representam os diferentes tipos de instruções apresentadas no ponto anterior (ver imagem seguinte).
  • 18. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 18 de 202 Figura 5 - Símbolos gráficos usados em fluxogramas Apesar de ser possível representar qualquer algoritmo num fluxograma, são mais usados efetivamente na representação de problemas mais pequenos ou então em processos com elevado nível de abstração. Se fossem usados em algoritmos grandes, um fluxograma estender-se-ia por várias páginas tornando quase impraticável a sua leitura e inviável a sua interpretação. De seguida apresenta-se um problema exemplo, e duas sugestões de solução. Na primeira sugestão foi usada a representação num fluxograma e na segunda uma implementação através de pseudo-código. PROBLEMA Há a necessidade de criar uma aplicação que faça a recolha 3 números inseridos pelo utilizador e que determine qual o maior valor introduzido. Construa o algoritmo que servirá de base à implementação.
  • 19. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 19 de 202 PROPOSTA DE SOLUÇÃO (usando um fluxograma) Figura 6 - Proposta de solução através de fluxograma
  • 20. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 20 de 202 PROPOSTA DE SOLUÇÃO (com pseudo-código) Figura 7 - Proposta de solução através de pseudo-código
  • 21. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 21 de 202 2. APRESENTAÇÃO DE FERRAMENTAS 2.1. VISUALG 2.0 O VisuAlg é um interpretador de algoritmos que nasceu da necessidade dos alunos poderem testar as respostas aos exercícios de iniciação à programação, sem a presença do docente. Uma das grandes vantagens em usar este programa como apoio à resolução de problemas, é o facto de se poder fazer depuração na lógica em implementação, permitindo aos alunos autodescobrir possíveis erros cometidos. Os alunos devem desenvolver a capacidade de execução mental de um algoritmo. No entanto, podem e devem usar esta ferramenta como forma de comprovar que esse raciocínio está correto, já que a ferramenta permite a execução, como se o algoritmo já estivesse implementado numa linguagem possível de interpretar pelo processador. De realçar que o VisuAlg foi criado no Brasil pelo Professor Cláudio Morgado de Sousa e que, por esse motivo, os termos usados não são exatamente os que usamos habitualmente em Portugal. No quadro seguinte são apresentadas alguns exemplos a ter em conta. BRASIL PORTUGAL Escreva Escrever Leia Ler Escolha Selecionar OutroCaso Senão FimEscolha FimSelecionar Para… Faça Para… Fazer Enquanto… Faça Enquanto… Fazer Repita… Até Repetir… Até Var Variáveis Interrompa Interromper Continue Continuar … … (demonstração)
  • 22. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 22 de 202 2.2. MICROSOFT VISUAL STUDIO O Visual Studio é um IDE (integrated development environment) de desenvolvimento criado pela Microsoft que permite a criação e depuração de aplicações .Net (lê-se dotNet) de forma rápida e fiável. A plataforma .Net surge da estratégia da Microsoft oferecer um ambiente de desenvolvimento único independentemente do equipamento e sistema operativo onde vá ser executado o programa depois de compilado. Para executar um programa feito nesta tecnologia num determinado equipamento, basta que a framework .Net (versão correta) esteja instalada nesse equipamento (estratégia similar à máquina virtual do JAVA). O objetivo principal do .Net é juntar numa única plataforma de desenvolvimento as funcionalidades necessárias à implementação de uma solução de início a fim, abstraindo o programador de grande parte dos detalhes relacionados diretamente com o dispositivo onde será executado. Existem vários motivos pelos quais a comunidade de programadores adota o Visual Studio como ferramenta predileta de desenvolvimento: x Intellisense – é o valioso suporte dado pelo editor de código (assistência ao processo de codificação), que permite ao programador escrever código com apoio de semântica e sintaxe permanente; x Debugging – que permite ao programador presenciar a execução do seu código, avaliando a cada instante o valor de variáveis e as chamadas feitas entre os diferentes componentes. Trata-se de uma funcionalidade que permite ver a acontecer o processamento de instruções numa velocidade possível de acompanhar pelo ser humano. 2.2.1. TIPOS DE PROJETOS (PRINCIPAIS) O Visual Studio oferece um ambiente de desenvolvimento para vários tipos de projeto e várias linguagens (C++, Visual Basic, C# e J#): x Console Application – para aplicações do tipo consola em que existe pouca interação com o utilizador e o aspeto gráfico é secundário; x Windows Forms Application – para criação de aplicações a serem executadas em Windows. São aplicações mais pesadas do ponto de vista do processador já que tem uma componente gráfica muito superior. São os tipos de projetos mais usados em sistemas operativos Microsoft e oferecem um bom “user experience”;
  • 23. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 23 de 202 x Windows Phone App – para criação de aplicações a serem usadas em Windows Phone. x ASP.Net Web Forms Application – para a criação de aplicações web; x Class Library – para a criação de bibliotecas de componentes reusáveis entre várias aplicações; x Outros – como projetos para Cloud, Windows store, etc. Figura 8 - Microsoft Visual Studio 2013 (projetos) (demonstração)
  • 24. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 24 de 202 2.3. DEV C++ (BLOODSHED) O Dev C++ é um ambiente de desenvolvimento com editor, compilador e depurador, que exige poucos recursos do computador (P. Alexandre, 2015). É uma ferramenta gratuita para Windows. Figura 9 - Dev C++ (demonstração)
  • 25. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 25 de 202 3. ALGORITMOS EM PSEUDO-CÓDIGO 3.1. REGRAS, TERMINOLOGIAS E ESTRUTURA DOS ALGORITMOS Um algoritmo inicia sempre com o termo Algoritmo e termina com o termo Fim_Algoritmo. Estes dois termos delimitam todo o algoritmo que pode ser divido em três zonas distintas (rever Figura 4): x Zona das declarações – é o bloco imediatamente a seguir ao nome do algoritmo. Neste bloco são inseridos comentários indicando o autor, versão e outros dados relevantes ao algoritmo e, com o objetivo de facilitar a leitura, por vezes são também especificadas as variáveis de entrada e de saída do algoritmo (listas identificadas pelas etiquetas Entrada e Saída). x Zona das variáveis – é o bloco que se segue ao termo Variáveis e é o sítio correto onde devem especificadas as variáveis necessárias ao algoritmo e os seus respetivos tipos. x Zona de instruções – é o bloco delimitado pelas etiquetas Inicio e Fim e é onde realmente vive a lógica criada pelo programador que, ao ser executada, soluciona o problema pretendido pelo algoritmo. É importante salientar que, a execução do algoritmo, ocorre sempre pela ordem das instruções e que, com o objetivo de facilitar o entendimento da lógica fruto da criatividade do programador, são constantemente usadas linhas de comentário para documentar instruções ou blocos de instruções. As linhas de comentário podem ser usadas em qualquer zona do algoritmo, iniciam sempre com o caracter identificador # (equivalente ao // do C, C# e JAVA) e tem por único objetivo documentar as instruções, sendo descartados em runtime (momento de execução). As palavras (termos) que compõem sintaxe da linguagem algorítmica são consideradas reservadas pelo que não podem ser usadas, a não ser no contexto previsto pelas regras de sintaxe. Esta limitação estende- se à generalidade das linguagens de programação incluindo C, JAVA e C# que tem também a sua lista de termos reservados. No quadro seguinte apresentam-se alguns dos termos reservados pelas regras de sintaxe da linguagem algorítmica. ALGUMAS PALAVRAS RESERVADAS DA LINGUAGEM ALGORITMICA algoritmo variáveis inicio fim inteiro real numérico caracter verdadeiro falso repetir ate enquanto fazer para selecionar caso se então senão e ou escrever ler função procedimento interromper continuar booleano …
  • 26. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 26 de 202 ALGUMAS PALAVRAS RESERVADAS DA LINGUAGEM C, JAVA e C# void main boolean char byte short int long float double true false string null this default do while break continue return switch case if then else for private public protected new class extends interface …
  • 27. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 27 de 202 3.2. CONSTANTES E VARIÁVEIS As variáveis são essenciais para calcular e manipular dados em qualquer linguagem de programação. A imagem abaixo, mostra através de uma analogia gráfica, como podem ser imaginadas as variáveis. Uma variável pode ser entendida como uma caixa (lilás) que consegue guardar um valor (vermelho) e cujo rótulo é constituído por um nome (azul) (que identifica univocamente o conteúdo ou seja o valor), e um tipo (verde) (que especifica o tipo de dados que consegue guardar (numérico, texto, etc.)). Figura 10 – Analogia gráfica para definição de variáveis (linguagem algorítmica) O conteúdo dessa caixa, ou seja o valor da variável (vermelho), pode ser alterado sempre que necessário. No entanto, o novo valor tem que ser sempre do tipo de dados (verde), inscrito inicialmente no rótulo da caixa (variável) e, quando é alterado, o valor anterior é perdido. Ao contrário do valor (vermelho), o nome (azul) e o tipo de dados (verde) mantêm-se fixos desde a criação da variável (lilás), até ao momento que deixa de fazer falta e é destruída (descartada da memória). As variáveis são palavras que tem o significado da natureza do seu conteúdo (semântica), e podem ser acedidas através do seu nome. No entanto, para poderem ser usadas, têm que ser previamente declaradas.
  • 28. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 28 de 202 Declarar uma variável, não é mais do que dizer ao computador que deve alocar (reservar) espaço em memória para guardar valores. Voltando à analogia com a caixa, declarar uma variável não é mais do que criar uma caixa vazia (sem valor), inscrevendo apenas no rótulo o nome e o tipo de dados permitido para o valor que possa vir a conter. À frente neste manual veremos que o processo de colocar um valor dentro da caixa é designado como atribuição (Å). Em algoritmos as variáveis são declaradas na zona variáveis apresentada no ponto 3.1 deste manual. Em C#, as variáveis podem ser declaradas ao longo de todo o código. No entanto, até por uma questão de organização e leitura de código, recomenda-se que sejam sempre declaradas no topo de cada método (função ou procedimento). A linguagem C, por sua vez é um pouco mais restritiva pelo que se aconselha veementemente que se declarem as variáveis antes do código. Sendo o C uma linguagem de baixo nível, a gestão de memória é da responsabilidade do programador. Por este motivo, existem compiladores, que não suportam ou lançam avisos (warnings) caso esta regra não seja tida em conta. O nome a atribuir a uma variável obedece a regras e estas podem ser diferentes mediante a linguagem a usar. Existem no entanto algumas regras que devem ser tidas em conta independentemente da linguagem que se esteja a usar: x O nome da variável deve ser sugestivo, ou seja, escolhido de forma a representar intuitivamente o seu conteúdo; x Não pode ser nenhuma das palavras reservadas da linguagem (ver ponto 3.1); x O primeiro caracter deve ser uma letra ou um underscore ( _ ); x O comprimento tem restrições mediante a linguagem em questão. No C# o tamanho máximo do identificado da variável é de 132, já no C depende do compilador mas rondam os 30 caracteres (por exemplo o compilador TurboC tem o limite de 31 caracteres, que é a regra definida pelo padrão ANSI C); x As variáveis não podem conter espaços em branco; x Grande parte das linguagens atuais são Case-Sensitive, ou seja, uma palavra em maiúsculas é diferente da mesma palavra em minúsculas;
  • 29. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 29 de 202 A sequência de imagens seguinte exemplifica a declaração de variáveis em diferentes linguagens iniciando pelo pseudo-código. Para facilitar o entendimento, são usados os mesmos nomes e tipos de dados nas diferentes linguagens. Figura 11 – Declaração de variáveis em linguagem algorítmica Figura 12 - Declaração de variáveis em C
  • 30. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 30 de 202 Figura 13 - Declaração de variáveis em C# O conceito de constante é em tudo similar ao da variável. A grande diferença é que o valor da constante é atribuído no momento de compilação não podendo ser alterada durante o tempo de execução. De entre as várias vantagens em usar constantes, salientar: x O facto de não ser possível alterar um valor definido como fixo, ou seja, pode servir como uma regra de proibição de alteração de um valor predefinido (ex: o valor de PI será fixo, o nome da licença do programa, etc.); x O sistema operativo não necessita alocar os recursos adicionais necessários às alterações de valor; Talvez pelo facto de uma constante poder ser facilmente substituída por uma variável (simplesmente não alterada durante o tempo de execução), em algoritmos não é usual fazer a distinção (a não ser que seja algo importante para a lógica que se pretende implementar). É normalmente na fase de desenvolvimento que o programador decide converter uma variável não alterável em constante. Em C e C#, para identificar uma constante, é usado o termo reservado const, como ilustrado a seguir.
  • 31. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 31 de 202 Figura 14 - Exemplo de declaração de constante em C Figura 15 - Exemplo de declaração de constante em C#
  • 32. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 32 de 202 3.3. TIPOS DE DADOS Os tipos de dados, como apresentado no ponto 3.2, especificam o tipo de conteúdo possível de ser guardado em cada variável. Como é mostrado na Figura 11, é aquando da declaração da variável que é indicado o respetivo tipo de dados. Em algoritmos são usados apenas os tipos de dados principais, sendo que, em momento de implementação, cabe ao programador usar os tipos de dados mais adequados à realidade da linguagem de programação escolhida. As tabelas seguintes apresentam os tipos de dados mais usados nas linguagens C e C#. Para facilitar o contexto e limitações de cada uma, é feita uma comparação com os tipos usados em pseudo-código. PSEUDO-CODIGO TIPOS DE DADOS MAIS USADOS NA LINGUAGEM C INTEIRO char 1Byte De -128 a 127 unsigned char 1Bytes De 0 a 255 short int 2Bytes De -32768 a 32767 unsigned short int 2Bytes De 0 a 65535 int 2Bytes (16 bits) 4Bytes (32 bits) De -32768 a 32767 (processador 16 bits) De -2147483648 a 2147483647 (processador de 32 bits) unsigned int 2Bytes (16 bits) 4Bytes (32 bits) De 0 a 65535 (processador 16 bits) De 0 a 4294967295 (processador de 32 bits) long int 4Bytes De -2147483648 a 2147483647 unsigned long int 4Bytes De 0 a 4294967295 REAL float 4Bytes De -3.402823e38 a 3.402823e38 double 8Bytes De -1.79769313486232e308 a 1.79769313486232e308 TEXTO OU CARACTER char[] 1Byte / char ASCII (char adicional para o caracter terminador 0) LOGICO ((sem correspondência)) PSEUDO-CODIGO TIPOS DE DADOS MAIS USADOS NA LINGUAGEM C# INTEIRO byte 1Byte De 0 a 255 int 4Bytes De -2147483648 a 2147483647 uint 4Bytes De 0 a 4294967295 short 2Bytes De -32768 a 32767 ushort 2Bytes De 0 a 65535 long 8Bytes De -922337203685477508 a 922337203685477507 ulong 8Bytes De 0 a 18446744073709551615 REAL float 4Bytes De -3.402823e38 a 3.402823e38 double 8Bytes De -1.79769313486232e308 a 1.79769313486232e308 decimal 16Bytes De ±1.0 × 10e−28 a ±7.9 × 10e28 TEXTO OU CARACTER string Unicode Æ 1 Caracter = 2 Bytes char 2Bytes Unicode Æ 1 Caracter = 2 Bytes LOGICO bool 1Byte [verdadeiro|falso] precisaria apenas de 1bit, mas a unidade mínima endereçável de memória é o Byte
  • 33. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 33 de 202 Como é percetível, existem vários tipos de dados que podem ser usados para a mesma natureza de valores. A diferença entre eles é o tamanho da caixa, ou seja, a quantidade de Bytes que serão necessários para guardar os respetivos valores. A título de exemplo analise-se novamente a declaração da variável “ano” da Figura 11. Foi usado o tipo int ou seja, foi criada uma caixa com 4Bytes de tamanho para albergar um valor inteiro que dificilmente fugirá ao intervalo [0:2999]. Em ambiente académico, não se coloca a necessidade de rigor absoluto no tipo de dados mais adequado a cada realidade, no entanto, deve-se ainda assim, ter em conta a escolha de um tipo suficientemente grande para albergar o intervalo de valores possíveis. A responsabilidade da correta e rigorosa escolha do tipo de dados de cada variável é do implementador aquando da fase de desenvolvimento. É lógico que pode sempre usar-se um tipo de dados que permita guardar um grande intervalo de valores, por exemplo, é possível declarar e usar a variável idade com o tipo de dados long int (long C#), no entanto, não é uma escolha racional do ponto de vista dos recursos alocados. A escolha do tipo de dados para cada variável é muito mais do que escolher um tipo que contenha um intervalo de valores suficientemente grande para a natureza de dados que se pretende guardar. Não esquecer que, quanto maior for a quantidade de Bytes alocados, mais recursos de memória e de processador (tempo de execução) serão necessários para manipular variáveis. As imagens seguintes apresentam propostas de tipos de dados em C e C# para implementação do algoritmo da Figura 11. Abaixo de cada variável (caixa) é apresentada a quantidade de memória que será alocada (tamanho da caixa) com cada declaração de variável. Figura 16 - Proposta de tipos de dados para implementação em C
  • 34. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 34 de 202 Figura 17 - Proposta de tipos de dados para implementação em C# São muitas as linguagens de programação que obrigam à declaração das variáveis antes de serem usadas. Esta necessidade de declarar variáveis com os respetivos tipos de dados, tem algumas vantagens, como por exemplo: x Contextualização de analistas e programadores – um nome de variável sugestivo associado a uma correta atribuição do tipo de dados, promove a boa contextualização por parte de quem lê e interpreta, ou seja, funciona como uma confirmação que se entendeu corretamente o propósito da existência da variável no contexto do bloco de código em que se insere. Na imagem seguinte, pode ser observado como uma atribuição “não natural” (inesperada) do tipo de dados, pode contribuir para a ambiguidade na interpretação do significado da variável. Figura 18 - Definição ambígua de tipos de dados em pseudo-código
  • 35. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 35 de 202 Figura 19 - Definição ambígua de tipos de dados em C Figura 20 - Definição ambígua de tipos de dados em C# Em contraste, se forem usados os tipos de dados esperados (expectáveis, naturais) para cada variável, essa informação funciona, para quem lê, como um validador de que foi entendido o motivo da existência da variável no contexto da solução que se está a desenvolver (algoritmo ou bloco de código). Figura 21 - Definição natural de tipos de dados em pseudo-código Figura 22 - Definição natural de tipos de dados em C
  • 36. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 36 de 202 Figura 23 - Definição natural de tipos de dados em C# x Suporte à codificação com maior produtividade – esta talvez seja uma vantagem mais do C# do que do C já que é totalmente dependente do editor de código. O editor original de código C# (Microsoft Visual Studio) é constituído por um conjunto de mecanismos que validam a correta utilização dos tipos de dados e, quando existe um conflito entre o tipo declarado e o efetivamente usado, o programador é alertado imediatamente para corrigir o problema. Esta assistência ao desenvolvimento oferecida pelo IDE, promove o ato de bem codificar à primeira, já que um grande número de erros serão detetados e corrigidos instantaneamente aquando do desenvolvimento e não em tempo de compilação / depuração. Na linguagem C esta vantagem não é tão visível já que a maioria dos validadores apenas fazem o seu trabalho em momento de compilação. No entanto, ainda assim alertam para o uso incorreto do tipo de dados num momento pré-execução o que permite ao programador detetar erros antes do lançamento do executável. Figura 24 - Alerta para o uso incorreto de tipo de dados em momento de compilação (C)
  • 37. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 37 de 202 Figura 25 - Alerta para o uso incorreto de tipo de dados em momento de codificação (C#) 3.4. OPERADORES MATEMÁTICOS Nesta secção são apresentados os operadores aritméticos usados na linguagem algorítmica. A tabela seguinte apresenta-os individualmente, fazendo um paralelismo com os operadores equivalentes usados em C e C#. ALGORITMOS C, C# NOTAS + + Adição - - Subtração * * Multiplicação / / Se dois inteiros o resultado será divisão inteira (), senão será a divisão real Ex: 7/2 = 3; 7/2.0 = 3,5 ou DIV % ou MOD % Resto da divisão Ex: 5 % 2 = 1 De seguida apresentam-se alguns exemplos de código onde se podem analisar a aplicação de operadores matemáticos.
  • 38. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 38 de 202 Figura 26 - Uso do operador soma em pseudo-código Figura 27 - Uso do operador soma em C
  • 39. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 39 de 202 Figura 28 - Uso do operador soma em C# Figura 29 - Uso do operador de divisão em pseudo-código
  • 40. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 40 de 202 Figura 30 - Uso do operador de divisão em C Figura 31 - Uso do operador de divisão em C#
  • 41. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 41 de 202 Figura 32 - Uso do operador resto em pseudo-código Figura 33 - Uso do operador resto em C
  • 42. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 42 de 202 Figura 34 - Uso do operador resto em C# As imagens seguintes apresentam a forma de usar os incrementadores e decrementadores. De notar que o uso de contadores em pseudo-código (ou linguagem algorítmica) é um pouco mais restritiva quanto a forma de implementar. Em C e C#, como é visível nas imagens seguintes, existem várias formas de codificar este tipo de instruções. Figura 35 - Uso de operador incrementador e decrementador em pseudo-código
  • 43. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 43 de 202 Figura 36 - Uso de operador incrementador e decrementador em C Figura 37 - Uso de operador incrementador e decrementador em C# O bloco de código seguinte, mostra como conjugar o símbolo de atribuição em conjunto com outros operadores matemáticos.
  • 44. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 44 de 202 Figura 38 - Exemplo de atribuição em conjunto com operadores matemáticos em C Figura 39 - Exemplo de atribuição em conjunto com operadores matemáticos em C#
  • 45. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 45 de 202 Para ser possível representar programaticamente as expressões matemáticas, é necessário proceder à sua linearização, ou seja, transforma-las em linhas, usando operadores da forma conveniente. A imagem seguinte apresenta um exemplo equação e a sua equivalente linearizada. Figura 40 - Linearização de equações 3.5. OPERADORES LÓGICOS E RELACIONAIS Os operadores lógicos e relacionais permitem efetuar comparações entre termos e são fundamentais na programação. Todos os programas usam expressões relacionais e lógicas, pois todos eles necessitam tomar decisões para controlo de fluxo do programa. A simbologia usada como operadores relacionais é em tudo semelhante com a linguagem matemática, e o resultado de uma avaliação (entre dois operandos ou duas expressões) pode ser o valor lógico (booleano) verdadeiro (1) ou falso (0). A tabela seguinte apresenta os operadores relacionais usados em linguagem algorítmica, em C e C#. ALGORITMOS C, C# NOTAS > > Exemplo: A > B Se A for maior que B a condição é verdadeira (1), caso contrário é falsa (0). < < Exemplo: C < D Se C for menor que D a condição é verdadeira (1), nos outros casos é falsa (0). >= >= Exemplo: E >= F Se E for maior ou igual a F, então a condição é verdadeira (1), caso contrário é falsa (0). <= <= Exemplo: G <= H Se G for menor ou igual a H, então a condição é verdadeira (1), caso contrário é falsa (0). = == Exemplo: I == J Se I for igual a J então a condição é verdadeira (1), senão é falsa (0). <> != Exemplo: K != L Se K for diferente de L então a condição será avaliada como verdadeira (1), em qualquer outro caso será falsa (0).
  • 46. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 46 de 202 Os operadores lógicos atuam sobre expressões de onde também resultam os valores lógicos verdadeiro (1) ou falso (0). Na prática é uma forma de conjugar o resultado de várias avaliações em simultâneo. A tabela seguinte apresenta os operadores lógicos usados em algoritmia, em C e C#. ALGORITMOS C, C# NOTAS E & && Exemplo: ( A > B ) & ( C < D ) Se ambos os operandos forem verdadeiros (1), ou seja, se A for maior que B e C menor que D, a expressão no seu todo é avaliada como verdadeira. Quando usado o operador lógico &, ambos os operandos são sempre avaliados. Se for usado o && e se o primeiro operando resultar em falso (0), o segundo já não é avaliado já que, qualquer que seja o seu resultado, a expressão completa será avaliada sempre como falsa (0). OU | || Exemplo: ( A > B ) | ( C < D ) Basta que um dos operandos seja verdadeiro (1) para que a expressão no seu todo seja avaliada como verdadeira. Quando usado o operador lógico |, ambos os operados são sempre avaliados. Quando usado o operador ||, se o primeiro operando for verdadeiro (1), o segundo não será avaliado porque, qualquer que seja o seu valor, a expressão avaliará sempre como verdadeiro (1). NÃO ! Exemplo: ~ ( A > B ) Se A maior que B então o resultado é falso (0) já que A > B é verdadeiro e a negação de verdadeiro é falso. Qualquer outro caso é verdadeiro (1). As imagens seguintes apresentam alguns exemplos de uso de operadores relacionais e lógicos.
  • 47. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 47 de 202 Figura 41 - Uso de operadores relacionais e lógicos em VisuAlg (1) Figura 42 - Uso de operadores relacionais e lógicos em C (1)
  • 48. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 48 de 202 Figura 43 - Uso de operadores relacionais e lógicos em C# (1) Figura 44 - Uso de operadores relacionais e lógicos em VisuAlg (2)
  • 49. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 49 de 202 Figura 45 - Uso de operadores relacionais e lógicos em C (2) Figura 46 - Uso de operadores relacionais e lógicos em C# (2)
  • 50. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 50 de 202 3.6. INSTRUÇÕES DE SEQUÊNCIA As instruções do tipo sequencial são as que tem uma estrutura simples e são responsáveis pelos inputs e outputs de dados, execução de cálculos e atribuição de valores a variáveis. O fluxo de execução das instruções é de cima para baixo, como demonstra a imagem seguinte. Figura 47 - Fluxo de execução de instruções 3.6.1. ATRIBUIÇÃO Atribuição é o nome dado ao processo de inserir um valor na variável, relembrando a analogia com as caixas, é a forma de inserir um valor na caixa (substituindo o lá existente se for o caso). O quadro seguinte apresenta a simbologia de atribuição usada em linguagem algorítmica e em C, JAVA e C#. SIMBOLO EXEMPLO ALGORITMOS Å nome Å “Célio Carvalho” C, JAVA e C# = nome = “Célio Carvalho” Um dos erros mais frequentes com o uso do sinal igual (=) é a possível confusão que pode gerar com o duplo igual (==). Enquanto a primeira versão (=) representa a atribuição de um valor a uma variável, o segundo (==) é usado como forma de comparar a igualdade entre dois valores ou variáveis. Como já foi usada várias vezes a atribuição, recorda-se simplesmente a forma de usar com a imagem do exemplo seguinte.
  • 51. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 51 de 202 Figura 48 - Atribuição em VisuAlg Figura 49 - Atribuição em C Figura 50 - Atribuição em C#
  • 52. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 52 de 202 3.6.2. ENTRADA/SAÍDA DE DADOS (LER E ESCREVER) Como já visto anteriormente, um programa necessita de dados para resolver o problema sendo que, estes dados, são normalmente inseridos pelo utilizador ou lidos a partir de uma base de dados. Por outro lado, um programa tem que comunicar o resultado final ao utilizador, havendo assim a necessidade de usar uma forma de o fazer. Em linguagem algorítmica usam-se as instruções: x LER – para recolher informação inserida pelo utilizador; x ESCREVER – para mostrar informação ao utilizador, como por exemplo, o resultado final da solução do problema; A forma de recolher e mostrar dados ao utilizador de uma linguagem de programação depende da tecnologia de desenvolvimento envolvida: x Console Applications – usam-se comandos de consola para recolher e mostrar informação. x Aplicações Windows Forms e Aplicações Web – usam-se vários controlos em função do tipo de dados a inserir. Por exemplo, Textbox, Combobox, DataGrid, Listbox, etc. x Aplicações Windows Phone – usam-se controlos também em função do tipo de dados a inserir, como por exemplo, Textbox, Combobox, Checkbox, RadioButton, etc. As imagens seguintes demonstram o uso dos comandos responsáveis por ler e escrever dados em pseudo- código e a partir de projetos de consola C e C#.
  • 53. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 53 de 202 Figura 51 - Ler e Escrever para processos de LER e ESCREVER em VisuAlg (1) Figura 52 - Ler e Escrever para processos de input e output em C (1)
  • 54. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 54 de 202 Figura 53 - Ler e Escrever para processos de input e output em C# (1)
  • 55. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 55 de 202 Figura 54 - Ler e Escrever para processos de LER e ESCREVER em VisuAlg (2)
  • 56. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 56 de 202 Figura 55 - Ler e Escrever para processos de input e output em C (2)
  • 57. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 57 de 202 Figura 56 - Ler e Escrever para processos de input e output em C# (2)
  • 58. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 58 de 202 3.6.3. EXERCÍCIOS (FICHA Nº 1) [01] - Um professor pretende encontrar uma forma simplificada de calcular a nota final à disciplina de inglês de um aluno. A fórmula que usa na sua metodologia de avaliação considera uma ponderação diferente do primeiro teste (t1) para o segundo (t2). 𝒏𝒐𝒕𝒂𝑭𝒊𝒏𝒂𝒍 = 𝟎, 𝟒𝒕𝟏 + 𝟎, 𝟔𝒕𝟐 a) Considerando que os valores das notas devem ser inseridas pelo utilizador, proponha um algoritmo (e implemente-o), que apresente ao utilizador a nota final da disciplina. b) Evolua o algoritmo anterior no sentido de ser inserido e apresentado o nome do aluno aquando da resposta da nota final. c) Evolua ainda o mesmo algoritmo, para que a nota final possa também ser calculada para outras disciplinas usando a mesma fórmula. [02] – Há a necessidade de conhecer informaticamente o resultado das operações aritméticas entre dois números inteiros escolhidos pelo utilizador. a) Construa um algoritmo que seja capaz de apresentar, em várias linhas, os resultados da sua adição, subtração, multiplicação, divisão (não tratar exceção da divisão por zero) e resto. Implemente o algoritmo criado. [03] – O consumo de combustível de um carro pode ser calculado em função da distância percorrida com determinada quantidade de combustível, como apresentado na fórmula seguinte. 𝑥 = litrosConsumidos kmPercorridos ∗ 100 a) Proponha um algoritmo que recolha os dados referentes a uma viagem (litros consumidos e quilómetros percorridos), e calcule o consumo aos 100km obtido na viagem. Implemente o algoritmo. b) Evolua o algoritmo de forma a perguntar o custo do combustível por litro e, com esta nova informação, indique qual o custo da viagem.
  • 59. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 59 de 202 [04] – Com a criação do Euro (moeda usada nos países da CE aderentes), a nossa necessidade de cálculo de câmbios reduziu drasticamente. No entanto, e principalmente quando realizamos negócios com países não pertencentes à CE, é frequente ter que se calcular o câmbio da moeda, ou seja, quanto vale um determinado valor em euros, noutra moeda estrangeira. A imagem seguinte apresenta uma proposta de algoritmo que visa resolver este problema. a) Considera que o algoritmo resolve integralmente o problema? Justifique. Proponha o seu algoritmo no sentido de materializar possíveis melhorias e otimizações. Implemente a sua proposta.
  • 60. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 60 de 202 [05] – De seguida é apresentado um algoritmo que foi criado com base na técnica dos fluxogramas. Inicio Fim Insira nota de avaliação continua Se >= 10 Ler nota então alunoAprovado Å verdadeiro exameFinal Å não senão Se < 8 então alunoAprovado Å falso exameFinal Å sim Escrever alunoAprovado, exameFinal senão Insira nota da prova oral Se => 14 alunoAprovado Å falso exameFinal Å não então senão alunoAprovado Å falso exameFinal Å sim Ler nota a) Entenda o problema e sugira o enunciado que poderia dar origem a esta solução. b) Identifique os possíveis erros destacando-os visualmente e justificando a sua resposta.
  • 61. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 61 de 202 3.7. INSTRUÇÕES DE DECISÃO Como já dito anteriormente, os programas são usados no sentido de automatizar soluções para problemas existentes e, em todos os problemas, existe sempre a necessidade de tomar decisões com base em dados. As instruções de decisão (também conhecidas por instruções de seleção) permitem a escolha ou opção entre vários caminhos possíveis, sendo que a decisão acerca do caminho escolhido, depende totalmente do valor dos dados que serviram de base à decisão e do critério usado para a sua avaliação. Analise-se a seguinte frase: “se ganhar o 1º prémio do euromilhões, compro uma casa para mim e ofereço outra ao professor; se ganhar o 2º prémio então, em vez das casas compro dois carros, um para mim e outro para ele; senão pago-lhe um jantar…”. Como deve já estar a perceber, são inúmeras as vezes que o ser humano tem que tomar decisões porque tudo na vida se baseia em escolhas. Fique claro a existência de 3 caminhos distintos na frase acima: x Caso ganhe o 1º prémio – se ganhar o 1º prémio… x Caso ganhe o 2º prémio – se ganhar o 2º prémio… x Nos restantes casos – senão (ou seja nos restantes casos… outros prémios) … Também é importante que fique entendido que, a consequência pela escolha de um caminho apenas acontece se o caminho em causa for o escolhido: x se ganhar o 1º prémio Æ …compro uma casa para mim e ofereço outra ao professor… x se ganhar o 2º prémio Æ …compro dois carros, um para mim e outro para ele… x senão (ou seja nos restantes casos) Æ … pago-lhe um jantar… Esta secção mostra como preparar um algoritmo para a tomada de decisões com base em critérios previamente definidos.
  • 62. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 62 de 202 3.7.1. SE.. ENTÃO… SENÃO…. Esta instrução de decisão é também conhecida por decisão binária já que permite decidir qual o caminho a seguir de entre dois existentes ou, em alternativa, se deve ou não executar um bloco de instruções. A imagem seguinte apresenta graficamente o uso da instrução Se… Então… para decidir acerca da execução ou não de um bloco de instruções. As instruções apenas serão executadas se a condição a analisar for verdadeira, se for falsa nada será processado. Figura 57 - Instrução de decisão Se... Então... PROBLEMA Devido à crise, o governo decidiu criar uma sobretaxa de IRS extraordinária de 3,5% sobre os salários cujo valor seja superior ao salário mínimo nacional. Esta nova taxa, apenas deve incidir sobre o valor que remanesce depois de subtraído o salário mínimo ao salário do funcionário. Sugira um algoritmo para resolver o problema, acautelando a exceção prevista para os funcionários que apenas aufiram o salário mínimo nacional. SOLUÇÃO As imagens seguintes apresentam uma sugestão de resolução do problema.
  • 63. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 63 de 202 Figura 58 - Aplicação de Se...Então… na solução de um problema em VisuAlg
  • 64. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 64 de 202 Figura 59 - Implementação de Se...Então… na solução de um problema em C
  • 65. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 65 de 202 Figura 60 - Implementação de Se...Então… na solução de um problema em C#
  • 66. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 66 de 202 A imagem seguinte demonstra o uso da instrução Se… Então… Senão… para decidir qual dos dois blocos de instruções deve ser executado. Caso a condição seja verdadeira, será executado o bloco de instruções 1, senão será executado o bloco de instruções 2. Figura 61 - Instrução de decisão Se... Então...Senão... PROBLEMA Na Unidade Curricular de português foi definida a nota mínima de 8,5 valores para o primeiro teste e de 9 valores para o segundo. Foi também decidido que a nota final à unidade seria a média aritmética entre as notas desses dois testes. A aprovação de um aluno é apenas possível se a nota final (média entre os dois testes) for igual ou superior a 10 valores. Se o aluno tiver uma nota final igual ou superior a 17 valores terá que fazer defesa oral. Nestes casos, a nota final do aluno será sempre inserida diretamente pelo professor. Caso não compareça à defesa, o professor atribuirá a nota final de 17 valores. Desenvolva um algoritmo para resolver o problema e sugira uma implementação. SOLUÇÃO As imagens seguintes apresentam uma sugestão de resolução do problema.
  • 67. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 67 de 202 Figura 62 - Aplicação de Se...Então…Senão na solução de um problema em VisuAlg
  • 68. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 68 de 202 Figura 63 - Implementação Se...Então…Senão… na solução de um problema em C
  • 69. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 69 de 202 igura 64 - Implementação Se...Então…Senão… na solução de um problema em C#
  • 70. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 70 de 202 3.7.2. SELECIONAR… CASO1… CASO(N)… SENÃO…. Esta instrução de decisão é conhecida por decisão múltipla já que permite decidir qual o caminho a seguir de entre vários possíveis. É usado normalmente em situações que se pretende testar uma variável com vários valores possíveis. A imagem seguinte mostra graficamente o uso desta instrução. Como é visível, o bloco de instruções a executar depende inteiramente do valor da variável. Figura 65 - Instrução de decisão Selecionar...Caso1...Caso(N)... Senão... PROBLEMA Um clube de futebol pretende um programa que lhe facilite o processo de classificação de atletas em categorias. A tabela apresentada abaixo, define as categorias existentes e também os intervalos de idade que especificam a categoria para cada atleta. Com o objetivo de promover as inscrições na categoria Juvenil, o clube oferece a taxa de inscrição aos atletas com 11 e 12 anos. Certifique-se que o utilizador é lembrado desse facto na sua implementação. De ATÉ Categoria 11 15 Juvenil 16 20 Júnior 21 25 Profissional Apresente uma solução para o problema.
  • 71. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 71 de 202 SOLUÇÃO As imagens seguintes apresentam uma sugestão de resolução do problema. Figura 66 - Aplicação de Selecionar...Caso1...Cason...Senao na solução de um problema em VisuAlg (1)
  • 72. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 72 de 202 Figura 67 - Implementação de Selecionar...Caso1...Cason...Senão na solução de um problema em C (1)
  • 73. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 73 de 202 Figura 68 - Implementação de Selecionar...Caso1...Cason...Senão na solução de um problema em C# (1)
  • 74. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 74 de 202 PROBLEMA Para facilitar o controlo no consumo de energia, é necessário criar uma pequena aplicação que estime o valor da fatura mensal de um cliente, com base nos Kw estimados de consumir num mês (estimativa de consumo num mês). Tenha em atenção que, o custo por Kw varia em função do tipo de cliente: x Particulares (continente) – 0,1865 € x Particulares (ilhas) – 0,1875 € x Pequenas empresas – 0,1754 € x Médias e grandes empresas – 0,1592 € x Estado e organismos públicos – 0,1311 € Note que aos valores indicados é necessário acrescer IVA à taxa de 23%. Desenvolva um algoritmo que torne simples a resolução deste cálculo. SOLUÇÃO As imagens seguintes apresentam uma sugestão de resolução do problema.
  • 75. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 75 de 202 Figura 69 - Aplicação de Selecionar...Caso1...Cason...Senao na solução de um problema em VisuAlg (2)
  • 76. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 76 de 202 Figura 70 - Implementação de Selecionar...Caso1...Cason...Senao na solução de um problema em linguagem C (2)
  • 77. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 77 de 202 Figura 71 - Implementação de Selecionar...Caso1...Cason...Senao na solução de um problema em linguagem C# (2)
  • 78. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 78 de 202 PROBLEMA A escola “Só Crânios” inscreve automaticamente os alunos com idades compreendidas entre os 14 e os 18 anos em atividades extracurriculares. Desenvolva uma aplicação que recolha a idade, primeiro e ultimo nome de um aluno com o objetivo de, no final, indicar ao utilizador qual a atividade em que o aluno se encontra automaticamente inscrito. O programa deve garantir o cumprimento das regras seguintes: x A idade só é válida se estiver entre os 14 e os 18 anos inclusive; x O primeiro nome só é válido se tiver no mínimo 3 letras; x O último nome só é válido se tiver no máximo 11 letras e no mínimo 4; x O nome completo (concatenação do primeiro e último nome) não pode exceder os 18 caracteres (incluindo o espaço que os separa). A violação de qualquer uma destas regras significa o abandono prematuro do programa. No entanto, se todas as regras foram validadas com sucesso, a aplicação deve informar qual a atividade em que o aluno se encontra inscrito atendendo à sua idade (ver tabela abaixo). IDADE Atividade 14 Aluno automaticamente inscrito nas aulas de dança 15 Aluno automaticamente inscrito nas aulas de futebol 16 Aluno automaticamente inscrito nas aulas de futebol 17 Aluno automaticamente inscrito nas aulas de ballet 18 Aluno automaticamente inscrito nas aulas de ballet SOLUÇÃO As imagens seguintes apresentam uma sugestão de resolução do problema.
  • 79. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 79 de 202 Figura 72 - Aplicação de Selecionar...Caso1...Cason...Senao na solução de um problema em VisuAlg (3)
  • 80. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 80 de 202 Figura 73 - Implementação de Selecionar...Caso1...Cason...Senao na solução de um problema em linguagem C (3)
  • 81. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 81 de 202 Figura 74 - Implementação de Selecionar...Caso1...Cason...Senao na solução de um problema em linguagem C# (3)
  • 82. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 82 de 202 3.7.3. EXERCÍCIOS (FICHA Nº 2) [01] – O índice de massa corporal (IMC) de alguém é calculado através da divisão do peso em Kg pela sua altura em m2 . Assim, por exemplo, uma pessoa de 1,67m que pese 55Kg tem um IMC = 19,72 porque, 𝐼𝑀𝐶 = peso altura2 = 55Kg 1,67m ∗ 1,67m = 19,72 a) Desenhe um algoritmo que recolha os dados referentes a uma pessoa e calcule o seu IMC. Quando terminar, implemente-o. b) Evolua o algoritmo anterior para que mostre ao utilizador de forma automática a interpretação do índice introduzido. IMC Interpretação Até 18,5 (inclusive) Peso abaixo do recomendado De 18,5 até 25 (inclusive) Peso normal De 25 a 30 (inclusive) Peso acima do recomendado Mais que 30 Peso muito acima do recomendado (obesidade) [02] – Um vendedor ganha um valor de salário fixo acrescido de 15% das vendas que realiza no mês. No entanto, só recebe comissão se esta for de valor superior ao seu salário. a) Desenvolva um algoritmo capaz de automatizar estes cálculos e, de seguida, implemente-o. b) No final de cada mês é atribuída uma classificação a cada vendedor em função do volume de vendas por si conseguido (ver quadro seguinte). Evolua o programa anterior de forma a mostrar a classificação do vendedor e também o valor do prémio associado. CLASSIFICAÇÃO VOLUME DE VENDAS PRÉMIO D Até 19999 € 0 € C De 20000 € até 29999 € 150 € B De 30000 € até 60000 € 400 € A Mais de 60000 € 1,5 %
  • 83. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 83 de 202 c) Por fim, e com o objetivo de promover o desempenho nas atividades de cobrança, o chefe de vendas distingue cada vendedor com uma nota qualitativa que representa prémios ao fim de cada mês. Melhore o algoritmo anterior para fazer face a esta distinção (note que a nota deve pode ser inserida através do seu código ou da sua descrição). Prémio Nota 1 MAU 2 REGULAR 3 BOM 4 EXCELENTE Um jantar 2 3 3 3 Um fim-de-semana 2 2 2 3 Viagem à Madeira 2 2 3 2 Viagem ao Brasil 2 2 2 3 [03] – Numa determinada empresa há a necessidade de criar uma aplicação que identifique o tipo de cliente em função do seu volume de compras anual (ver quadro seguinte). TIPO CLIENTE ATÉ (inclusive) NORMAL 5.000,00 € PROFISSIONAL 20.000,00 € EMPRESARIAL 999.999,99 € a) Desenvolva um algoritmo capaz de automatizar esta identificação e, de seguida, sugira uma implementação. [04] – Uma loja de venda de animais pretende criar uma aplicação que automatize o processo de cálculo de PVP (preços de venda a publico). A margem a ser praticada varia em função da família dos artigos vendidos, (conforme tabela seguinte). CÓDIGO FAMILIA MARGEM 1 COBRAS 3,0 % 4 RATOS 4,0 % 9 CAES 2,5 % a) Desenvolva um algoritmo capaz de automatizar esta identificação, de forma a mostrar o PVP de um artigo com e sem IVA (23%) atendendo à família a que pertence. Implemente-o.
  • 84. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 84 de 202 3.8. INSTRUÇÕES DE REPETIÇÃO Até este momento, os exemplos e exercícios apresentados, são compostos apenas por uma sequência de instruções, que são executadas pela ordem em que foram dispostas e apenas uma única vez. As instruções de repetição, vulgarmente conhecidas por ciclos, permitem a execução repetitiva de uma sequência de instruções. A execução de um ciclo é controlada através do valor lógico de uma condição que é testada a cada iteração e que, desta forma, decide se uma nova iteração deve ou não acontecer. Um dos aspetos mais importantes a ter em conta na definição de um ciclo é a condição de paragem (também chamada de sentinela). Caso seja mal planeada, pode conduzir o fluxo de execução a um ciclo infinito, dando a sensação ao utilizador que a aplicação deixou de responder. Para que este problema nunca ocorra, a lógica criada pelo programador deve garantir que, algures durante a execução, a condição de paragem aconteça algures no fluxo de execução. Nesta secção são apresentadas várias estruturas de repetição. Note-se que, apesar de todas elas permitirem a execução de ciclos, a forma de os controlar varia de estrutura para estrutura, fazendo com que uma estrutura seja mais adequada para determinadas realidades do que outras. 3.8.1. REPETIR… ATÉ Este ciclo permite executar um bloco de instruções até que uma determinada condição lógica seja verdadeira, ou seja, enquanto a avaliação da condição resultar no valor lógico - falso, o ciclo continuará a executar. Nesta estrutura de repetição, a condição que determina uma nova iteração (que decide se o ciclo deve ou não continuar), é avaliada no final de cada iteração. Isto significa que, pelo menos a primeira iteração será sempre executada já que a primeira avaliação é feita precisamente após essa primeira execução.
  • 85. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 85 de 202 Figura 75 - Instrução de repetição Repetir... Até Em linguagem algorítmica, usa-se o termo repetir para indicar o início do bloco de instruções a executar repetidamente e o termo até para especificar a condição a ser avaliada no final de cada iteração e que decide se deve ou não ocorrer uma nova iteração, ou seja, se o ciclo deve ou não continuar (ver imagem anterior). Em linguagem C e C#, usa-se a palavra reservada do para iniciar o bloco e while para definir a condição a ser avaliada. De seguida é apresentado um problema onde é usado esta instrução. De notar que, enquanto que em linguagem algorítmica a condição até a falso continua a execução do ciclo, em C e C#, é definido um valor verdadeiro na condição while para que o ciclo continue.
  • 86. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 86 de 202 PROBLEMA Pretende-se uma aplicação que, perante várias inserções de números naturais (N0) pelo utilizador, calcule a quantidade de números pares inseridos (considerar o zero não válido como par). SOLUÇÃO As imagens seguintes apresentam uma sugestão de resolução do problema. Figura 76- Aplicação de Repetir... até... na solução de um problema em VisuAlg (1)
  • 87. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 87 de 202 Figura 77 - Implementação de Repetir... até... na solução de um problema em linguagem C (1)
  • 88. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 88 de 202 Figura 78 - Implementação de Repetir... até... na solução de um problema em linguagem C# (1) PROBLEMA Um centro comercial pretende adequar um pouco mais a decoração do seu espaço de lazer e de alimentação à faixa etária dos seus visitantes. Para isso, no próximo fim-de-semana, irá recolher informação das pessoas que lá entram, com o objetivo de determinar: x O número total de visitantes femininos e masculinos x O número de visitantes com idade compreendida entre os 10 e 16 anos e os 16 e 24 anos. SOLUÇÃO As imagens seguintes apresentam uma sugestão de resolução do problema em linguagem algorítmica e uma proposta de implementação.
  • 89. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 89 de 202 Figura 79 - Aplicação de Repetir... até... na solução de um problema em VisuAlg (2)
  • 90. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 90 de 202 Figura 80 - Implementação de Repetir... até... na solução de um problema em linguagem C (2)
  • 91. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 91 de 202 Figura 81 - Implementação de Repetir... até... na solução de um problema em linguagem C# (2)
  • 92. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 92 de 202 3.8.2. ENQUANTO… FAZER Este ciclo permite a execução de um bloco de instruções, enquanto que a condição lógica seja avaliada como verdadeira, por outras palavras, quando a avaliação da condição resultar num valor lógico de falso, o ciclo é abandonado e a execução continua na linha imediatamente a seguir ao fim do ciclo. A diferença principal desta estrutura de repetição para a estrutura Repetir… Até… é o facto de a avaliação que determina a continuidade de execução do ciclo, ser efetuada antes de cada iteração e não no final. Esta diferença faz com que o número mínimo de execuções do ciclo seja zero, ou seja, pode acontecer que o ciclo não chegue a executar vez nenhuma, caso a condição seja avaliada como falsa logo antes da primeira iteração. O ciclo equivalente em C e C# é o while que é seguido imediatamente da condição que determina a execução ou não do ciclo. Caso a condição seja avaliada como verdadeira é executada nova iteração, ou seja, é executado o bloco de instruções delimitado pelas chavetas que lhe seguem. Figura 82 - Instrução de repetição Enquanto… Fazer… PROBLEMA O organismo público responsável pela meteorologia em Portugal necessita de fazer um estudo acerca da temperatura na cidade do Porto. Crie uma aplicação capaz de recolher durante n dias a temperatura, e no final, informar qual o pico de calor ocorrido, assim como a média das temperaturas recolhidas. Em cada dia apenas será efetuada uma única recolha.
  • 93. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 93 de 202 SOLUÇÃO De seguida é apresentada uma proposta de solução. Figura 83 - Aplicação de Enquanto... Fazer... na solução de um problema em VisuAlg (1)
  • 94. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 94 de 202 Figura 84 - Implementação de Enquanto... Fazer... na solução de um problema em linguagem C (1)
  • 95. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 95 de 202 Figura 85 - Implementação de Enquanto... Fazer... na solução de um problema em linguagem C# (1)
  • 96. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 96 de 202 PROBLEMA A Associação de estudantes de Escola Secundária “Só Crânios” está a organizar um concurso de matemática com o objetivo de encontrar os 3 melhores alunos à disciplina. A equipa organizadora do concurso necessita de uma aplicação que faça as inscrições de alunos, através da recolha do nome e da nota de 11º ano a matemática. O número de alunos inscritos no concurso nunca poderá ser inferior a 5 e superior a 10. No entanto, as inscrições terminam se a média das notas dos alunos inscritos atingir os 18 valores, desde que cumprido o preceito do mínimo de 5 alunos inscritos. Caso um candidato tenha nota inferior a 14 valores, a sua inscrição é automaticamente recusada. SOLUÇÃO De seguida é apresentada uma proposta de solução que termina mostrando os alunos inscritos.
  • 97. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 97 de 202 Figura 86 - Aplicação de Enquanto... Fazer... na solução de um problema em VisuAlg (2)
  • 98. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 98 de 202 Figura 87 - Implementação de Enquanto... Fazer... na solução de um problema em linguagem C (2)
  • 99. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 99 de 202 Figura 88 - Implementação de Enquanto... Fazer... na solução de um problema em linguagem C# (2)
  • 100. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 100 de 202 3.8.3. PARA… FAZER Este ciclo executa um bloco de instruções um numero pré-determinado de vezes. Como é facilmente percetível, o para… fazer… é bastante usado em situações que, à partida, é conhecido ou calculável o numero de iterações a ser executado pelo ciclo. Como mostra a imagem a seguir, a sintaxe deste ciclo inclui (além do bloco de instruções a ser executado caso a iteração ocorra): x Bloco início - com as instruções a serem executadas antes da primeira iteração; x Condição – expressão lógica testada a cada iteração e que, para haver lugar a nova iteração, tem que ser avaliada como verdadeira; x Bloco iteração – que é um bloco que é executado no final de cada iteração; Figura 89 - Instrução de repetição Para... Fazer... Em C e C#, este ciclo é implementado iniciando-se com a instrução for seguido (entre parêntesis e separados por pontos e virgulas) do bloco de início, da condição de avaliação que terá que ser avaliada como verdadeiro para haver lugar a nova iteração e, por fim, o bloco que é executado no final de cada iteração. De seguida é apresentado um problema onde a escolha do ciclo for como estrutura de repetição parece natural.
  • 101. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 101 de 202 PROBLEMA Desenvolva um programa capaz de calcular o fatorial de um dado numero (ver formula seguinte). SOLUÇÃO De seguida é apresentada uma proposta de solução. Figura 90 - Aplicação de Para... Fazer... na solução de um problema em VisuAlg (1)
  • 102. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 102 de 202 Figura 91 - Implementação de Para... Fazer... na solução de um problema em linguagem C (1) Figura 92 - Implementação de Para... Fazer... na solução de um problema em linguagem C# (1)
  • 103. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 103 de 202 PROBLEMA Desenvolva um programa capaz de gerar e apresentar ao utilizador 10 números inteiros aleatórios entre 0 e 100. SOLUÇÃO De seguida é apresentada uma proposta de solução. Figura 93 - Aplicação de Para... Fazer... na solução de um problema em VisuAlg (2)
  • 104. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 104 de 202 Figura 94 - Implementação de Para... Fazer... na solução de um problema em linguagem C (2) Figura 95 - Implementação de Para... Fazer... na solução de um problema em linguagem C# (2)
  • 105. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 105 de 202 3.8.4. EXERCICIOS (FICHA Nº 3) [01] – Há a necessidade de criar uma aplicação que, perante a introdução de dois limites inteiros, calcule a quantidade e o somatório de todos os valores ímpares nesse intervalo. Note que os limites do intervalo podem ser inseridos no menor para o maior ou do maior para o menor. a) Desenhe um algoritmo que resolva o problema usando o ciclo para… fazer… e, de seguida, implemente-o usando o ciclo for. b) Desenhe e implemente a mesma solução anterior usando desta vez o ciclo enquanto… fazer… c) Por fim, desenhe e implemente a mesma solução usando o ciclo repetir… até… [02] – Um número é primo se apenas for divisível por, exatamente, 4 números (2 positivos e 2 negativos). Por exemplo, o número 11 é primo porque apenas é divisível por {11, 1, -1, -11}. Já o número 21 não é primo porque é divisível por {21, 7, 3, 1, -1, -3, -7, -21}. a) Desenhe um algoritmo capaz de validar se um determinado numero inteiro inserido pelo utilizador é ou não primo. b) Evolua o algoritmo anterior de forma a indicar os divisores responsáveis pelo facto de um determinado numero não ser primo. [03] – A secretaria de uma escola necessita de uma aplicação que permita calcular a média, nota máxima e mínima de uma turma à disciplina de Geometria. A aplicação deve receber o número de alunos existentes e solicitar as notas apenas para essa quantidade de estudantes. a) Desenhe um algoritmo que resolva o problema e implemente-o de seguida. b) Evolua o algoritmo anterior e respetiva implementação, para que o número de alunos não tenha que ser comunicado num momento prévio ao processamento. Use como condição de paragem a inserção de uma nota acima dos 20 valores.
  • 106. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 106 de 202 [04] – Considere a seguinte aplicação (ver imagem seguinte) que pretende encontrar, numa fila de 7 pessoas, aquela que apresente idade mais baixa. Caso seja encontrada alguma pessoa cuja idade seja igual ou inferior a 6 anos, automaticamente essa será a pessoa vencedora. Em caso de empate, deve ser considerada a primeira pessoa encontrada com a idade vencedora.
  • 107. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 107 de 202 a) Analise o código da imagem e comente a solução por ele implementada. Apresente correções/melhorias ao algoritmo e implemente-o. b) Que alterações teria que efetuar no algoritmo, caso se pretendesse que, em caso de empate, fosse o ultima pessoa com essa idade a vencer. c) Evolua o algoritmo anterior para que o número de pessoas da fila seja ilimitado até ser inserido o nome “PARAR”.
  • 108. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 108 de 202 [05] – São várias as formas como uma aplicação pode indicar ao utilizador as funcionalidades que oferece. Na imagem seguinte é apresentado um pequeno menu que permite ao utilizador acesso a funcionalidades de terceiros. a) Implemente uma solução que permita a navegação nas opções. A aplicação deve apenas terminar quando pressionada a letra “s” e, quando selecionada qualquer uma das restantes opções, deve apenas indicar uma linha especificando a opção escolhida. [06] – Analise a imagem seguinte que contem um bloco de código. Resuma os erros que encontra justificando a sua resposta.
  • 109. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 109 de 202 [07] – Um intervalo de inteiros pode ser representado através de um conjunto de elementos. É necessário criar uma aplicação, capaz de receber um intervalo definido pelo utilizador (intervalo fechado) e de apresentar os respetivos valores em formato de conjunto. Pretende-se conhecer também a soma dos inteiros contidos nesse conjunto. a) Desenhe um algoritmo capaz de responder a este problema usando um ciclo de repetição Para… Fazer… e, de seguida, implemente-o. b) Construa uma segunda versão da mesma solução, usando o ciclo Enquanto… Fazer…
  • 110. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 110 de 202 [08] – Aproveitando o facto de um programa conseguir gerar números aleatórios, é possível criar um jogo para adivinhar um desses números. Não esqueça as dicas ao utilizador para saber se o número é maior ou menor. a) Desenhe o algoritmo do jogo e implemente-o. b) Evolua o algoritmo anterior no sentido de ter os seguintes 3 níveis de dificuldade: NIVEL INTERVALO TENTATIVAS 1) Iniciante [1:10] 3 2) Medio [1:30] 10 3) Experiente [1:50] 15 [09] – Analise a forma geométrica apresentada na imagem seguinte, desenhada por uma aplicação do tipo consola. a) Crie um algoritmo que desenhe um quadrado, em que o tamanho do lado e o caracter de preenchimento são dados inseridos pelo utilizador. Implemente. b) Evolua o algoritmo anterior de forma a permitir também desenhar retângulos (dois lados indicados pelo utilizador). c) Evolua ainda o mesmo algoritmo, para que apenas as arestas sejam desenhadas, ou seja, a forma não tenha preenchimento.
  • 111. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 111 de 202 [10] – A imagem seguinte apresenta um triângulo desenhado numa aplicação do tipo consola. a) Desenhe o algoritmo que desenhe o triângulo na consola e implemente-o.
  • 112. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 112 de 202 3.9. TRAÇAGENS E TESTE Fazer uma traçagem consiste em testar um algoritmo para um conjunto de valores de entrada definido à partida. A traçagem permite observar o comportamento interno do algoritmo, à medida que o fluxo de execução das instruções que o compõem ocorre. A preparação de uma traçagem consiste em etiquetar (numerar por exemplo) os passos de execução do algoritmo. De seguida, constrói-se uma tabela usando como cabeçalhos das colunas, as variáveis e condições (avaliações) que se pretendem analisar durante a execução. Por fim, já na traçagem propriamente dita, será possível registar na tabela os valores assumidos por cada variável a cada passo e assim, entender melhor as avaliações efetuadas às condições no decurso do algoritmo. Resumindo, usam-se as traçagens para analisar analiticamente o funcionamento de um algoritmo. 3.9.1. EXEMPLOS O cálculo do quociente e resto de uma divisão inteira pode ser conseguido através de subtrações sucessivas, como mostrado na imagem seguinte que pretende calcular o quociente e resto de 33/7. Figura 96 - Calcular o quociente e resto pelo método das subtrações sucessivas O quociente corresponde ao número de vezes para qual é possível subtrair o divisor ao dividendo. No exemplo apresentado na imagem o divisor 7 pode ser 4 vezes subtraído do dividendo 33, fazendo com que o quociente (divisão inteira) seja precisamente 4 e o resto, ou seja, o que sobra depois de subtraídos todos os 7 possíveis, é 5. De seguida é apresentada uma sugestão para resolução deste problema, num primeiro momento em linguagem algorítmica (usando o VisuAlg) e depois com implementação da mesma solução.
  • 113. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 113 de 202 Figura 97 - Proposta de solução em VisuAlg
  • 114. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 114 de 202 Figura 98 - Proposta de implementação em C Figura 99 - Proposta de implementação em C#
  • 115. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 115 de 202 Perante este algoritmo / implementação, é possível efetuar uma traçagem para analisar (testar) mais analiticamente o comportamento do fluxo de instruções. O quadro seguinte pretende mostrar a traçagem da implementação. PASSO DIVIDENDO DIVISOR QUOCIENTE RESTO DIVIDENDO >= DIVISOR 01 0 02 33 0 03 33 7 0 04 33 7 0 33 >= 7 (verdade) 05 26 7 0 33 >= 7 (verdade) 06 26 7 1 33 >= 7 (verdade) 07 26 7 1 26 >= 7 (verdade) 08 19 7 1 26 >= 7 (verdade) 09 19 7 2 26 >= 7 (verdade) 10 19 7 2 19 >= 7 (verdade) 11 12 7 2 19 >= 7 (verdade) 12 12 7 3 19 >= 7 (verdade) 13 12 7 3 12 >= 7 (verdade) 14 5 7 3 12 >= 7 (verdade) 15 5 7 4 12 >= 7 (verdade) 16 5 7 4 5 >= 7 (falso) 17 5 7 4 5 Na prática, a demorada tarefa de efetuar uma traçagem, permite aferir acerca da correta atribuição de valores às variáveis e assim, analisar de forma facilitada o evoluir do fluxo de execução de um algoritmo. A traçagem é muitas vezes usada quando se pretende analisar um algoritmo complexo ou um erro de lógica difícil de detetar.
  • 116. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 116 de 202 3.10. MODULARIZAÇÃO (ORGANIZAÇÃO DE CÓDIGO) 3.10.1. CONTEXTUALIZAÇÃO (CAMADAS, COMPONENTES E SUB-ROTINAS) A programação através de módulos pressupõe a divisão do código em unidades de organização fáceis de gerir e localizar pelos programadores. Até este momento, apenas foram mostrados e propostos exercícios de tamanho bastante reduzido, com o objetivo de introduzir o tema dos algoritmos e de programação. No entanto, na produção real de software, as aplicações contém milhares e até milhões de linhas de código e se não houver uma estratégia adequada à organização do código, mais cedo ou mais tarde, a evolução e manutenção das soluções será uma tarefa demorada, complexa e, no limite, até impossível de concretizar. A modularização do código oferece bastantes vantagens, destacando entre elas: x A criação de várias camadas especializadas de código no mesmo programa, viabilizando a concretização de projetos mais complexos, tipicamente de leitura e manutenção mais alargada e complexa. Com a implementação do código em camadas, fica facilitado o desenvolvimento em equipa, permitindo a atribuição de tarefas de programação individuais com fronteiras bem delineadas (exemplo: base de dados, camada de acesso aos dados, camada de regras de negócio, camada de programação Windows Applications, camada de programação para Web, camada de programação para mobile, etc.); x Reduzir custos de desenvolvimento já que o desenvolvimento dos módulos é objetivamente atribuído a uma equipa ou programador; x Facilitar os processos de correção de erros já que, conhecido o erro, é mais fácil identificar a camada onde reside; x Reduzir o número de erros resultantes do processo de codificação, porque as equipas poderão testar as funcionalidades por si desenvolvidas, de forma totalmente isolada dos módulos desenvolvidos pelos seus colegas. Quando uma equipa entrega o seu trabalho, testou-o num ambiente de testes unitários; x Reutilização de código através de sub-rotinas, ou seja, desenvolver funcionalidades não especificas para um bloco de código mas gerais de forma a poderem ser consumidas noutros pontos da mesma aplicação ou até noutras aplicações.
  • 117. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 117 de 202 3.10.2. SUB-ROTINAS A programação com recurso a sub-rotinas (pequena unidade de código) permite encapsular processamento e, desta forma, os programas ficam mais simples de desenvolver e de evoluir. Quanto mais independentes forem as sub-rotinas (módulos), mais atentamente o programador se pode concentrar em cada pequeno problema individual ignorando temporariamente os restantes. Quando num determinado ponto de código se faz uma chamada a uma sub-rotina, o controlo do programa é transferido para essa sub-rotina, ou seja, as próximas instruções a serem executadas são as constantes nessa sub-rotina. Uma vez terminada a sua execução, o controlo do programa é devolvido ao bloco que havia solicitado a execução da rotina agora terminada e continua na instrução imediatamente a seguir. Na programação estruturada são normalmente referidas dois tipos de sub-rotinas: x Funções – são sub-rotinas que, depois de executadas, conseguem retornar um valor ao bloco de instruções que a chamou em primeiro lugar. Funcionam como uma caixa preta, que se desconhece o conteúdo, mas que tem a capacidade de receber valores (designados por parâmetros ou argumentos) e devolver no final um resultado. As funções em linguagem estruturada e nas linguagens de programação tem um funcionamento similar às funções matemáticas como o seno ou raiz quadrada que, perante a comunicação de um valor (argumento), retorna um outro (resultado) x Procedimentos – são sub-rotinas muito parecidas com as funções, mas que não retornam qualquer valor quando terminam a execução, melhor dito, retornam um valor “nada”. Apesar desta característica, conseguem receber argumentos como as funções. As sub-rotinas necessitam de valores para processar e, a forma correta de lhes transmitir esses valores é através do uso de parâmetros. Apesar de ser possível uma sub-rotina processar com base em variáveis de âmbito global (o âmbito das variáveis será apresentado de seguida), tal não é considerado uma boa prática.
  • 118. ALGORITMOS I & INICIAÇÃO À PROGRAMAÇÃO Página 118 de 202 3.10.3. ÂMBITO DAS VARIÁVEIS As variáveis definidas no contexto de uma sub-rotina (função ou procedimento), são criadas no momento em que se inicia a execução dessa sub-rotina e destruídas no momento em que a sub-rotina termina. São conhecidas como variáveis locais pelo facto de serem apenas visíveis (acessíveis) pelo bloco de código que constitui a sub-rotina. De salientar que existem variáveis com âmbito mais abrangente, ou seja, variáveis possíveis de serem acedidas em todo o programa – são chamadas de variáveis globais. No entanto, a forma correta de passar valores para dentro de uma sub-rotina, deve ser através de parâmetros e não usando variáveis globais, da mesma forma que, para obter resultados de uma sub-rotina deve ser usada uma função em vez de um procedimento, já que a primeira tem a hipótese de retornar um valor.