diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt index b7043c9..55e611b 100644 --- a/_sources/index.rst.txt +++ b/_sources/index.rst.txt @@ -75,6 +75,13 @@ Na era do big data, os profissionais necessitam cada vez mais de conhecimentos e projetos/2021/index +.. toctree:: + :maxdepth: 1 + :caption: Provas + + provas/2023 + + .. toctree:: :maxdepth: 1 :caption: Informações Gerais: diff --git a/_sources/introducao-programacao/primeiro-prog.rst.txt b/_sources/introducao-programacao/primeiro-prog.rst.txt index b4b985b..c517ba3 100644 --- a/_sources/introducao-programacao/primeiro-prog.rst.txt +++ b/_sources/introducao-programacao/primeiro-prog.rst.txt @@ -96,7 +96,7 @@ Computando NDVI --------------- -O índice de vegetação por diferença normalizada conhecido como **Normalized Difference Vegetation Index** (**NDVI**) pode ser computado usando a reflectância das bandas do vermelho (*rde) e infravermelho próximo (*nir*), como mostrado na :eq:`eq:introducao-programacao:primeiro-prog:ndvi`: +O índice de vegetação por diferença normalizada conhecido como **Normalized Difference Vegetation Index** (**NDVI**) pode ser computado usando a reflectância das bandas do vermelho (*red*) e infravermelho próximo (*nir*), como mostrado na :eq:`eq:introducao-programacao:primeiro-prog:ndvi`: .. math:: :label: eq:introducao-programacao:primeiro-prog:ndvi @@ -244,4 +244,4 @@ Conversão entre Escalas de Temperatura: :math:`^oF \, \rightarrow \, ^oC` ----- -Na próxima seção iremo introduzir um conceito fundamental nas liguagens de programação: **tipos de dados**. \ No newline at end of file +Na próxima seção iremo introduzir um conceito fundamental nas liguagens de programação: **tipos de dados**. diff --git a/_sources/provas/2023.rst.txt b/_sources/provas/2023.rst.txt new file mode 100644 index 0000000..1135d9c --- /dev/null +++ b/_sources/provas/2023.rst.txt @@ -0,0 +1,117 @@ +.. + This file is part of "Notas de Aula do Curso Introdução à Programação com Dados Geoespaciais". + Copyright 2020-2021, Gilberto Queiroz and Thales Körting. + + +.. _cap_prova_2023: + +Avaliação 2023 +============== + + +**Questão 1.** O índice espectral conhecido por **Vegetation Condition Index** ou **VCI** pode ser calculado pela expressão apresentada na :eq:`eq:prova:2023:vci`: + + +.. math:: + :label: eq:prova:2023:vci + + VCI_i = 100 \times \frac{NDVI_i - NDVI_{min}}{NDVI_{max} - NDVI_{min}} + + +Considere a seguinte série temporal do NDVI para uma dada localização da superfície terrestre: + + +.. code-block:: python + + serie_ndvi = ( + 0.1208, 0.1323, 0.1635, 0.1792, 0.1674, 0.1727, 0.2587, 0.4313, 0.6086, 0.6791, + 0.5961, 0.4149, 0.2411, 0.1455, 0.1258, 0.1369, 0.1428, 0.1390, 0.1360, 0.1377, + 0.1387, 0.1358, 0.1325, 0.1328, 0.1362, 0.1433, 0.1637, 0.2139, 0.3041, 0.4231, + 0.5361, 0.5982, 0.5784, 0.4812, 0.3492, 0.2403, 0.1903, 0.1908, 0.2025, 0.1926, + 0.1601, 0.1279, 0.1165, 0.1326, 0.1821, 0.2797, 0.4303, 0.6003, 0.7243, 0.7582, + 0.7267, 0.7031, 0.7277, 0.7537, 0.6880, 0.4997, 0.2766, 0.1590, 0.2075, 0.3424, + 0.4198, 0.3667, 0.2364, 0.1362, 0.1156, 0.1359, 0.1381, 0.1154, 0.1056, 0.1268, + 0.1494, 0.1463, 0.1541, 0.2529, 0.4697, 0.7123, 0.8261, 0.7324, 0.5110, 0.3354, + 0.3195, 0.4254, 0.5172, 0.4972, 0.3863, 0.2800, 0.2425, 0.2541, 0.2554, 0.2237, + 0.1945, 0.2123, 0.2761, 0.3443, 0.3887, 0.4290, 0.5063, 0.6248, 0.7326, 0.7653 + ) + + +Pede-se: + + +**a)** Crie uma função para computar o VCI. + + +**b)** Crie uma função para calcular os valores máximo e mínimo do NDVI dada uma série como a mostrada acima. + + +**c)** Calcule o NDVI médio utilizando um laço do tipo ``for``. + + +**d)** Calcule o valor do VCI para :math:`20 \le i \le 25`, chamando a função criada no item (a) e escreva para cada valor calculado se ele encontra-se acima ou abaixo da média calculada no item (c). + + +.. tip:: + + Detalhes sobre o índice VCI pode ser consultado em :cite:`kogan:1995` e :cite:`kogan:1997`. + + +----- + + +**Questão 2.** Um recorte de uma imagem, de 01 banda, 10 linhas e 10 colunas, está armazenado como uma tupla de tuplas: + + +.. code-block:: python + + raster = ( + (0.58, 0.29, 0.08, 0.58, 0.42, 0.30, 0.00, 0.06, 0.36, 0.39), + (0.62, 0.64, 0.12, 0.67, 0.23, 0.57, 0.23, 0.21, 0.19, 0.27), + (0.54, 0.57, 0.51, 0.22, 0.32, 0.31, 0.19, 0.35, 0.85, 0.78), + (0.51, 0.22, 0.63, 0.52, 0.45, 0.57, 0.01, 0.29, 0.70, 0.96), + (0.56, 0.48, 0.80, 0.77, 0.29, 0.55, 0.85, 0.62, 0.20, 0.41), + (0.52, 0.50, 0.87, 0.83, 0.64, 0.20, 0.93, 0.69, 0.48, 0.55), + (0.16, 0.02, 0.48, 0.40, 0.86, 0.75, 0.16, 0.29, 0.00, 0.50), + (0.26, 0.03, 0.35, 0.67, 0.92, 0.77, 0.63, 0.12, 0.40, 0.51), + (0.63, 0.65, 0.31, 0.32, 0.10, 0.16, 0.22, 0.33, 0.10, 0.42), + (0.30, 0.05, 0.41, 0.49, 0.03, 0.06, 0.67, 0.12, 0.10, 0.41) + ) + + +Neste exercício você deve percorrer a imagem, reamostrando para 05 linhas e 05 colunas, e imprimindo os pixels de acordo com a seguinte regra: + +.. rst-class:: open + +- :math:`pixel > 0.7`, imprimir ``'x'``. + +- :math:`pixel \le 0.7`, imprimir ``'o'``. + + +.. note:: + + Para o resultado da impressão ficar de acordo com as linhas e colunas, você pode utilizar um parâmetro na função `print`: + + + .. code-block:: python + + print('x', end = ' ') # para imprimir 'x' sem pular a linha + + print('o', end = ' ') # para imprimir 'o' sem pular a linha + + +----- + + +**Questão 3.** O formato *ESRI Shapefile* é composto de pelo menos 03 arquivos, todos com o mesmo nome, e diferentes extensões (``.shp``, ``.dbf``, ``.shx``). Crie uma função ``get_shapefile(filename)``, que receba como entrada um nome de arquivo em formato string, verifique se o mesmo possui a extensão ``.shp``, e retorne uma lista de 03 arquivos, mantendo o nome, mas alterando a extensão para as 03 indicadas (``.shp``, ``.dbf``, ``.shx``). + + +Exemplos: + +.. rst-class:: open + +- ``get_shapefile('teste.shp') -> ('teste.shp', 'teste.dbf', 'teste.shx')`` + +- ``get_shapefile('teste.tif') -> ()`` + + diff --git a/agradecimentos.html b/agradecimentos.html index 30a3eb5..4cb0ca2 100644 --- a/agradecimentos.html +++ b/agradecimentos.html @@ -80,6 +80,10 @@
Tipos de dados primitivos (Seção 2.3):
Um bom tutorial sobre os tipos de dados elementares ou primitivos de Python pode ser encontrado em [71].
Um bom tutorial sobre os tipos de dados elementares ou primitivos de Python pode ser encontrado em [73].
Tipo lógico e expressões lógicas (Seções 2.9 e 2.11):
@@ -199,12 +203,12 @@Dicionários (Seção 2.17):
Dicionários são práticos para agrupar dados.
Para mais informações sobre o tipo dict
(dicionário) em Python, consulte [72] e [67].
Para mais informações sobre o tipo dict
(dicionário) em Python, consulte [74] e [69].
Conjuntos (Seção 2.18):
Para mais informações sobre o tipo set
(conjuntos) em Python, consulte [70], [78], [77] e [76].
Para mais informações sobre o tipo set
(conjuntos) em Python, consulte [72], [80], [79] e [78].
Funções (Seção 2.23):
@@ -257,7 +261,7 @@Estruturas de dados:
Para mais detalhes sobre as estruturas de dados de Python, consulte [4].
Em geral, as linguagens de programação possuem construtores que permitem criar novos tipos a partir dos tipos básicos ou elementares. Por exemplo, um tipo para manipulação de números complexos, com a parte real e imaginária, ou um tipo tipo para manipulação de pontos no plano cartesiano. Em linguagens como C e C++, existe um construtor chamado struct
que permite criar um novo tipo estruturado formado por elementos de outros tipos. Este construtor permite criar uma espécie de tipo composto. Wirth [87] lembra que este tipo composto é chamado de Produto Cartesiano na matemática.
Em geral, as linguagens de programação possuem construtores que permitem criar novos tipos a partir dos tipos básicos ou elementares. Por exemplo, um tipo para manipulação de números complexos, com a parte real e imaginária, ou um tipo tipo para manipulação de pontos no plano cartesiano. Em linguagens como C e C++, existe um construtor chamado struct
que permite criar um novo tipo estruturado formado por elementos de outros tipos. Este construtor permite criar uma espécie de tipo composto. Wirth [89] lembra que este tipo composto é chamado de Produto Cartesiano na matemática.
Nota Histórica
diff --git a/introducao-programacao/dicionarios.html b/introducao-programacao/dicionarios.html index b58dbbb..62808c4 100644 --- a/introducao-programacao/dicionarios.html +++ b/introducao-programacao/dicionarios.html @@ -112,6 +112,10 @@Nota
-Para mais detalhes sobre a estrutura dict
, consulte [27] e [20].
Para mais detalhes sobre a estrutura dict
, consulte [27] e [20].
Problema 4: Escreva um programa para computar o seguinte somatório (Equação 2.3):
Dica
-Para mais exemplos do uso do laço for
, consulte [80].
+Para mais exemplos do uso do laço for
, consulte [82].
Dica
-Para saber a sintaxe completa do comando while
, consulte [35].
+Para saber a sintaxe completa do comando while
, consulte [35].
Nota
@@ -331,7 +335,7 @@
Dica
-Um bom tutorial sobre laços pode ser encontrado em [59]. O site learningpython.org contém uma seção explicando o uso de laços for
e while
[48].
+Um bom tutorial sobre laços pode ser encontrado em [61]. O site learningpython.org contém uma seção explicando o uso de laços for
e while
[50].
Exemplos
diff --git a/introducao-programacao/exemplos.html b/introducao-programacao/exemplos.html index 245e84f..ce2dcd3 100644 --- a/introducao-programacao/exemplos.html +++ b/introducao-programacao/exemplos.html @@ -111,6 +111,10 @@A sequência %s
, dentro da string na linha 03, possui uma interpretação especial, ela funciona como um marcador de posição (placeholder) que será substituída (ou interpolada ou expandida) pelo valor fornecido à direita do operador %
. Existe uma regra bem definida de como construir as strings de formatação [37]. Algumas bem utilizadas são:
A sequência %s
, dentro da string na linha 03, possui uma interpretação especial, ela funciona como um marcador de posição (placeholder) que será substituída (ou interpolada ou expandida) pelo valor fornecido à direita do operador %
. Existe uma regra bem definida de como construir as strings de formatação [37]. Algumas bem utilizadas são:
%s
: substituição de strings.
%d
: substituição de números inteiros.
Nota
-A sintaxe de formatação do método format
pode ser encontrada em [22].
A sintaxe de formatação do método format
pode ser encontrada em [22].
Nota
-Um bom guia que demonstra o uso do operador %
e do método format
pode ser encontrado em [61].
Um bom guia que demonstra o uso do operador %
e do método format
pode ser encontrado em [63].
“Program construction consists of a sequence of refinement steps.”
Niklaus Wirth [86]
“Program construction consists of a sequence of refinement steps.”
Niklaus Wirth [88]
O termo algoritmo é usado na Ciência da Computação para descrever métodos finitos, determinísticos e efetivos, que são adequados à implementação na forma de programas de computador [66]. Para entender melhor essa definição, vamos descrever um algoritmo para computar o máximo divisor comum (MDC) entre dois números inteiros positivos quaisquer:
+O termo algoritmo é usado na Ciência da Computação para descrever métodos finitos, determinísticos e efetivos, que são adequados à implementação na forma de programas de computador [68]. Para entender melhor essa definição, vamos descrever um algoritmo para computar o máximo divisor comum (MDC) entre dois números inteiros positivos quaisquer:
Computar o MDC entre dois números inteiros positivos, p e q:
- Se q for 0, o resultado será p;
@@ -217,7 +221,7 @@ 2.1.1. Algoritmos2.1.2. Linguagens de Programação
Todo processador ou família de processadores, possui seu próprio conjunto de instruções e operações. Essas instruções e operações são representadas por padrões de bits que correspondem a diferentes comandos de máquina, como carga de dados nos registradores, adição, subtração, multiplicação ou divisão de valores de dois registradores, ou instruções para transferência do fluxo de execução de um programa. Essas instruções permitem que o computador realize as atividades mais básicas possíveis. A Tabela 2.2 apresenta um exemplo do formato das instruções do microprocessador MIPS
(32-bit).