Pular para o conteúdo

Algoritmos e Programação

Princípios de Ciência da Computação do AP · Tópico 3

Treinar
Videoaula para este tópico Abrir a página do vídeo
9:17

Algoritmos e Programação

Imagine um telefone com um milhão de nomes, e você precisa encontrar um. Verifique-os um por um, e poderia passar o dia todo. Há uma maneira de encontrá-lo em cerca de…

Narração em inglês · Legendas em inglês + 中文 gravadas

O código abaixo usa a pseudocódigo AP CSP – a referência neutra em linguagem do exame. A atribuição é escrita a ← expression, e os índices da lista começam em 1.

3.1

Variáveis e Atribuições

Programa

Compreensão Duradoura (AAP-1): Para encontrar soluções específicas para problemas generalizáveis, programadores representam e organizam dados de múltiplas formas.

Objetivo de Aprendizagem AAP-1.A: Representar um valor com uma variável. [Habilidade 3.A]

  • AAP-1.A.1 Uma variável é uma abstração dentro de um programa que pode armazenar um valor. Cada variável possui armazenamento de dados associado que representa um único valor por vez, mas esse valor pode ser uma lista ou outra coleção que, por sua vez, contém múltiplos valores.
  • AAP-1.A.2 O uso de nomes significativos para variáveis ajuda na legibilidade do código do programa e na compreensão dos valores representados pelas variáveis.
  • AAP-1.A.3 Alguns linguagens de programação fornecem tipos para representar dados, que são referenciados usando variáveis. Esses tipos incluem números, Booleanos, listas e strings.
  • AAP-1.A.4 Alguns valores são mais adequados para representação usando um tipo de dado em vez de outro.

Objetivo de Aprendizagem AAP-1.B: Determinar o valor de uma variável como resultado de uma atribuição. [Habilidade 4.B]

  • AAP-1.B.1 O operador de atribuição permite que um programa altere o valor representado por uma variável.

  • AAP-1.B.2 A folha de referência do exame fornece o operador "$\leftarrow$" para uso em atribuições. Por exemplo,

    Texto:

    a ← expression

    Bloco:

    a ← expression

    avalia expression e, em seguida, atribui uma cópia do resultado à variável a.

  • AAP-1.B.3 O valor armazenado em uma variável será o último valor atribuído. Por exemplo:

    a ← 1 b ← a a ← 2 display(b)

    ainda exibe 1.

Fonte: College Board AP Course and Exam Description

Uma variável 变量 é um lugar nomeado que segura um valor. O operador de atribuição 赋值 armazena o valor à direita na variável à esquerda:

Uma variável é um armazém nomeado cujo valor pode mudar
Uma variável é um armazém nomeado cujo valor pode mudar
a ← 5
b ← a + 3      // b is now 8

Uma variável segura um valor de cada vez; atribuir novamente substitui o anterior. Variáveis permitem que um programa armazene entrada, lembre resultados e os reutilize.

Explorar

Observe uma variável manter e alterar seu valor

Uma variável é uma caixa nomeada que armazena um valor de cada vez. Uma atribuição copia um valor para a caixa; atribuir novamente sobrescreve qualquer coisa que estava lá.

Vocabulário Treinar
Inglês Chinês Pinyin
variable/ˈveərɪəbl/ 变量 biàn liàng
assignment/əˈsaɪnmənt/ 赋值 fù zhí
Data abstraction/ˈdeɪtə əbˈstrækʃn/ 数据抽象 shù jù chōu xiàng
remainder/rɪˈmeɪndə/ 余数 yú shù
3.2

Abstração de Dados

Programa

Compreensão Duradoura (AAP-1): Para encontrar soluções específicas para problemas generalizáveis, programadores representam e organizam dados de múltiplas formas.

Objetivo de Aprendizagem AAP-1.C: Representar uma lista ou string usando uma variável. [Habilidade 3.A]

  • AAP-1.C.1 Uma lista é uma sequência ordenada de elementos. Por exemplo,

    [value1, value2, value3, ...]

    descreve uma lista onde value1 é o primeiro elemento, value2 é o segundo elemento, value3 é o terceiro elemento, e assim por diante.

  • AAP-1.C.2 Um elemento é um valor individual em uma lista que recebe um índice único.

  • AAP-1.C.3 Um índice é um método comum para referenciar os elementos em uma lista ou string usando números naturais.

  • AAP-1.C.4 Uma string é uma sequência ordenada de caracteres.

Objetivo de Aprendizagem AAP-1.D: Para abstração de dados: a. Desenvolva abstração de dados usando listas para armazenar múltiplos elementos. [Habilidade 3.B] b. Explique como o uso de abstração de dados gerencia a complexidade no código do programa. [Habilidade 3.C]

  • AAP-1.D.1 Abstração de dados fornece uma separação entre as propriedades abstratas de um tipo de dado e os detalhes concretos de sua representação.

  • AAP-1.D.2 Abstrações de dados gerenciam a complexidade em programas ao dar um nome a um conjunto de dados sem referenciar os detalhes específicos da representação.

  • AAP-1.D.3 Abstrações de dados podem ser criadas usando listas.

  • AAP-1.D.4 Desenvolver uma abstração de dados para implementar em um programa pode resultar em um programa mais fácil de desenvolver e manter.

  • AAP-1.D.5 Abstrações de dados frequentemente contêm diferentes tipos de elementos.

  • AAP-1.D.6 O uso de listas permite que múltiplos itens relacionados sejam tratados como um único valor. Listas são referidas por diferentes nomes, como array, dependendo da linguagem de programação.

    • Declaração de exclusão (EK AAP-1.D.6): O uso de listas encadeadas está fora do escopo deste curso e do Exame AP.
  • AAP-1.D.7 A folha de referência do exame fornece a notação

    [value1, value2, value3, ...]

    para criar uma lista com esses valores como o primeiro, segundo, terceiro e assim por diante itens. Por exemplo,

    • Texto:

      aList ← [value1, value2, value3, ...]

      Bloco:

      aList ← value1, value2, value3

      cria uma nova lista que contém os valores value1, value2, value3 e ... nos índices 1, 2, 3 e ... respectivamente e a atribui a aList.

    • Texto:

      aList ← []

      Bloco:

      aList ← (vazio)

      cria uma nova lista vazia e a atribui a aList.

    • Texto:

      aList ← bList

      Bloco:

      aList ← bList

      atribui uma cópia da lista bList à lista aList. Por exemplo, se bList contiver [20, 40, 60], então aList também conterá [20, 40, 60] após a atribuição.

  • AAP-1.D.8 A folha de referência do exame descreve uma estrutura de lista cujos valores de índice são de 1 até o número de elementos na lista, inclusive. Para todas as operações de lista, se um índice de lista for menor que 1 ou maior que o comprimento da lista, uma mensagem de erro é produzida e o programa será encerrado.

Fonte: College Board AP Course and Exam Description

Abstração de dados 数据抽象 permite gerenciar complexidade dando um único nome a uma coleção de dados – por exemplo, uma lista em vez de dezenas de variáveis separadas. Ela esconde detalhes: você usa a coleção nomeada sem se preocupar com como ela é armazenada. Listas (abaixo) são a principal abstração de dados do curso.

3.3

Expressões Matemáticas

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.A: Expressar um algoritmo que usa sequenciamento sem usar uma linguagem de programação. [Habilidade 2.A]

  • AAP-2.A.1 Um algoritmo é um conjunto finito de instruções que realizam uma tarefa específica.
  • AAP-2.A.2 Além de linguagens de programação visuais e textuais, algoritmos podem ser expressos de várias maneiras, como linguagem natural, diagramas e pseudocódigo.
  • AAP-2.A.3 Algoritmos executados por programas são implementados usando linguagens de programação.
  • AAP-2.A.4 Todo algoritmo pode ser construído usando combinações de sequenciamento, seleção e iteração.

Objetivo de Aprendizagem AAP-2.B: Representar um processo algorítmico passo a passo usando declarações de código sequenciais. [Habilidade 2.B]

  • AAP-2.B.1 Sequenciamento é a aplicação de cada etapa de um algoritmo na ordem em que as declarações de código são apresentadas.
  • AAP-2.B.2 Uma declaração de código é uma parte do código do programa que expressa uma ação a ser realizada.
  • AAP-2.B.3 Uma expressão pode consistir em um valor, uma variável, um operador ou uma chamada de procedimento que retorna um valor.
  • AAP-2.B.4 Expressões são avaliadas para produzir um único valor.
  • AAP-2.B.5 A avaliação de expressões segue uma ordem de operações definida pela linguagem de programação.
  • AAP-2.B.6 Declarações sequenciais executam na ordem em que aparecem no segmento de código.
  • AAP-2.B.7 Claridade e legibilidade são considerações importantes ao expressar um algoritmo em uma linguagem de programação.

Objetivo de Aprendizagem AAP-2.C: Avaliar expressões que usam operadores aritméticos. [Habilidade 4.B]

  • AAP-2.C.1 Operadores aritméticos fazem parte da maioria das linguagens de programação e incluem adição, subtração, multiplicação, divisão e operador módulo.

  • AAP-2.C.2 A folha de referência do exame fornece a MOD b, que avalia o resto quando a é dividido por b. Suponha que a seja um número inteiro maior ou igual a 0 e b seja um número inteiro maior que 0. Por exemplo, 17 MOD 5 avalia para 2.

  • AAP-2.C.3 A folha de referência do exame fornece os operadores aritméticos +, -, *, / e MOD.

    Texto e Bloco:

    • a + b
    • a - b
    • a * b
    • a / b
    • a MOD b

    Eles são usados para realizar operações aritméticas em a e b. Por exemplo, 17 / 5 avalia para 3.4.

  • AAP-2.C.4 A ordem de operações usada em matemática se aplica ao avaliar expressões. O operador MOD tem a mesma precedência que os operadores * e /.

Fonte: College Board AP Course and Exam Description

Programas calculam com os operadores +, -, *, / e MOD (o resto 余数 de uma divisão, ex: 17 MOD 5 é 2). As expressões seguem a ordem usual de operações. MOD é especialmente útil para testar divisibilidade (n MOD 2 = 0 significa n é par) e para envolver valores em torno de uma faixa.

Explorar

Avaliar uma expressão passo a passo

Uma expressão é avaliada com a ordem de operações: multiplicação e divisão ocorrem antes de adição e subtração, da esquerda para a direita.

3.4

Strings

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.D: Avaliar expressões que manipulam strings. [Habilidade 4.B]

  • AAP-2.D.1 Concatenação de string junta duas ou mais strings extremidade com extremidade para formar uma nova string.
  • AAP-2.D.2 Uma substring é uma parte de uma string existente.

Fonte: College Board AP Course and Exam Description

Uma string 字符串 é uma sequência ordenada de caracteres, como "hello". Programas unem strings (concatenação 拼接) e encontram seu comprimento. Strings representam texto – nomes, mensagens, sequências – e são uma entrada e saída comum de programas.

Vocabulário Treinar
Inglês Chinês Pinyin
string/strɪŋ/ 字符串 zì fú chuàn
concatenation/kənˌkætəˈneɪʃn/ 拼接 pīn jiē
Boolean expression/ˈbuːlɪən ekˈspreʃn/ 布尔表达式 bù ěr biǎo dá shì
conditional (selection)/kənˈdɪʃənl/ 条件语句 tiáo jiàn yǔ jù
nested conditional/ˈnestɪd kənˈdɪʃənl/ 嵌套条件 qiàn tào tiáo jiàn
Iteration (a loop)/ˌɪtəˈreɪʃn/ 迭代 dié dài
infinite loop/ˈɪnfɪnət luːp/ 无限循环 wú xiàn xún huán
algorithm/ˈælɡərɪθəm/ 算法 suàn fǎ
3.5

Expressões Booleanas

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.E: Para relações entre duas variáveis, expressões ou valores: a. Escrever expressões usando operadores relacionais. [Habilidade 2.B] b. Avaliar expressões que usam operadores relacionais. [Habilidade 4.B]

  • AAP-2.E.1 Um valor booleano é verdadeiro ou falso.

  • AAP-2.E.2 A folha de referência do exame fornece os seguintes operadores relacionais: =, ≠, >, <, ≥ e ≤.

    Texto e Bloco:

    • a = b
    • a ≠ b
    • a > b
    • a < b
    • a ≥ b
    • a ≤ b

    Eles são usados para testar a relação entre duas variáveis, expressões ou valores. Uma comparação usando um operador relacional avalia para um valor booleano. Por exemplo, a = b avalia para true se a e b forem iguais; caso contrário, avalia para false.

Objetivo de Aprendizagem AAP-2.F: Para relações entre valores booleanos: a. Escrever expressões usando operadores lógicos. [Habilidade 2.B] b. Avaliar expressões que usam operadores lógicos. [Habilidade 4.B]

  • AAP-2.F.1 A folha de referência do exame fornece os operadores lógicos NOT, AND e OR, que avaliam para um valor booleano.

  • AAP-2.F.2 A folha de referência do exame fornece

    Texto:

    NOT condition

    Bloco:

    NOT condition

    que avalia para true se condition for false; caso contrário, avalia para false.

  • AAP-2.F.3 A folha de referência do exame fornece

    Texto:

    condition1 AND condition2

    Bloco:

    condition1 AND condition2

    que avalia para true se ambas condition1 e condition2 forem true; caso contrário, avalia para false.

  • AAP-2.F.4 A folha de referência do exame fornece

    Texto:

    condition1 OR condition2

    Bloco:

    condition1 OR condition2

    que avalia para true se condition1 for true ou se condition2 for true ou se ambas condition1 e condition2 forem true; caso contrário, avalia para false.

  • AAP-2.F.5 O operando para um operador lógico é uma expressão booleana ou um único valor booleano.

Fonte: College Board AP Course and Exam Description

Uma expressão booleana 布尔表达式 avalia para true ou false. Ela usa operadores relacionais (=, ≠, <, >, ≤, ≥) e operadores lógicos NOT, AND, OR:

As três famílias de operadores: aritméticos, relacionais e lógicos *As três famílias de operadores: aritméticos, relacionais e lógicos

  • NOT inverte um valor,
  • AND é verdadeiro apenas quando ambos os lados são verdadeiros,
  • OR é verdadeiro quando pelo menos um lado é verdadeiro.

Essas condições movem toda decisão e loop.

Explorar

Tente a tabela verdade do OR

Uma expressão Booleana é verdadeira (1) ou falsa (0). OR é verdadeiro quando pelo menos um dos inputs é verdadeiro; altere os inputs para ver todos os casos.

3.6

Condicionais

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.G: Expressar um algoritmo que usa seleção sem usar uma linguagem de programação. [Habilidade 2.A]

  • AAP-2.G.1 Seleção determina quais partes de um algoritmo são executadas com base em uma condição ser true ou false.

Objetivo de Aprendizagem AAP-2.H: Para seleção: a. Escrever instruções condicionais. [Habilidade 2.B] b. Determinar o resultado de instruções condicionais. [Habilidade 4.B]

  • AAP-2.H.1 Instruções condicionais, ou "instruções if", afetam o fluxo sequencial de controle executando diferentes instruções com base no valor de uma expressão booleana.

  • AAP-2.H.2 A folha de referência do exame fornece

    Texto:

    IF(condition) { <block of statements> }

    Bloco:

    IF condition block of statements

    na qual o código em block of statements é executado se a expressão booleana condition avaliar para true; nenhuma ação é tomada se condition avaliar para false.

  • AAP-2.H.3 A folha de referência do exame fornece

    Texto:

    IF(condition) { <first block of statements> } ELSE { <second block of statements> }

    Bloco:

    IF condition first block of statements ELSE second block of statements

    na qual o código em first block of statements é executado se a expressão booleana condition avaliar para true; caso contrário, o código em second block of statements é executado.

Fonte: College Board AP Course and Exam Description

Um condicional (seleção) escolhe qual código executar. IF executa um bloco apenas quando sua condição é verdadeira; ELSE oferece uma alternativa:

Seleção escolhe entre caminhos baseado em uma condição
Seleção escolhe entre caminhos baseado em uma condição
IF (score ≥ 60)
{
    DISPLAY("Pass")
}
ELSE
{
    DISPLAY("Fail")
}
Explorar

Siga uma decisão if / else

Uma condicional executa um ramo ou outro dependendo se sua condição é verdadeira. Deslize o valor através do limite e observe qual ramo é tomado.

3.7

Condicionais Aninhadas

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.I: Para seleção aninhada: a. Escrever instruções condicionais aninhadas. [Habilidade 2.B] b. Determinar o resultado de instruções condicionais aninhadas. [Habilidade 4.B]

  • AAP-2.I.1 Instruções condicionais aninhadas consistem em instruções condicionais dentro de instruções condicionais.

Fonte: College Board AP Course and Exam Description

Uma condicional aninhada 嵌套条件 coloca uma IF dentro de outra (ou encadeia ELSE IF) para escolher entre mais de dois caminhos. Apenas o primeiro ramo correspondente executa:

IF (g ≥ 90)      { grade ← "A" }
ELSE IF (g ≥ 80) { grade ← "B" }
ELSE             { grade ← "C" }
3.8

Iteração

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.J: Expressar um algoritmo que usa iteração sem usar uma linguagem de programação. [Habilidade 2.A]

  • AAP-2.J.1 Iteração é uma parte repetitiva de um algoritmo. A iteração repete um número especificado de vezes ou até que uma condição dada seja satisfeita.

Objetivo de Aprendizagem AAP-2.K: Para iteração: a. Escrever instruções de iteração. [Habilidade 2.B] b. Determinar o resultado ou efeito colateral de instruções de iteração. [Habilidade 4.B]

  • AAP-2.K.1 Instruções de iteração alteram o fluxo sequencial de controle repetindo um conjunto de instruções zero ou mais vezes, até que uma condição de parada seja satisfeita.

  • AAP-2.K.2 A folha de referência do exame fornece

    Texto:

    REPEAT n TIMES { <block of statements> }

    Bloco:

    REPEAT n TIMES block of statements

    na qual o block of statements é executado n vezes.

  • AAP-2.K.3 A folha de referência do exame fornece

    Texto:

    REPEAT UNTIL(condition) { <block of statements> }

    Bloco:

    REPEAT UNTIL condition block of statements

    na qual o código em block of statements é repetido até que a expressão booleana condition avalie para true.

  • AAP-2.K.4 Em iteração REPEAT UNTIL(condition), um loop infinito ocorre quando a condição final nunca avaliará para true.

  • AAP-2.K.5 Em iteração REPEAT UNTIL(condition), se a condicional avaliar para true inicialmente, o corpo do loop não é executado em todas, devido à condição ser verificada antes do loop.

Fonte: College Board AP Course and Exam Description

Iteração (um loop) 迭代 repete instruções. Pseudocódigo AP tem duas formas:

Um loop de pré-condição (WHILE) testa antes do corpo, então pode executar zero vezes
Um loop de pré-condição (WHILE) testa antes do corpo, então pode executar zero vezes
REPEAT 5 TIMES        // a fixed count
{
    DISPLAY("hi")
}

REPEAT UNTIL (found)  // until a condition becomes true
{
    ...
}

Um loop que nunca atinge sua condição de parada é um loop infinito 无限循环.

Explorar

Rastreie um loop uma passagem de cada vez

Um laço repete um bloco enquanto seu contador percorre um intervalo. Passe passo a passo para observar o contador e o total acumulado atualizarem a cada passagem.

3.9

Desenvolvimento de Algoritmos

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.L: Comparar vários algoritmos para determinar se eles produzem o mesmo efeito colateral ou resultado. [Habilidade 1.D]

  • AAP-2.L.1 Algoritmos podem ser escritos de maneiras diferentes e ainda assim cumprir as mesmas tarefas.
  • AAP-2.L.2 Algoritmos que parecem semelhantes podem produzir efeitos colaterais ou resultados diferentes.
  • AAP-2.L.3 Algumas instruções condicionais podem ser escritas como expressões booleanas equivalentes.
  • AAP-2.L.4 Algumas expressões booleanas podem ser escritas como instruções condicionais equivalentes.
  • AAP-2.L.5 Diferentes algoritmos podem ser desenvolvidos ou usados para resolver o mesmo problema.

Objetivo de Aprendizagem AAP-2.M: Para algoritmos: a. Criar algoritmos. [Habilidade 2.A] b. Combinar e modificar algoritmos existentes. [Habilidade 2.B]

  • AAP-2.M.1 Algoritmos podem ser criados a partir de uma ideia, combinando algoritmos existentes ou modificando algoritmos existentes.
  • AAP-2.M.2 Conhecimento de algoritmos existentes pode ajudar na construção de novos. Alguns algoritmos existentes incluem:
    • determinar o valor máximo ou mínimo de dois ou mais números
    • calcular a soma ou média de dois ou mais números
    • identificar se um número inteiro é ou não divisível uniformemente por outro número inteiro
    • determinar o caminho de um robô através de um labirinto
  • AAP-2.M.3 Usar algoritmos existentes corretos como blocos de construção para construir outro algoritmo tem benefícios como reduzir o tempo de desenvolvimento, reduzir os testes e simplificar a identificação de erros.

Fonte: College Board AP Course and Exam Description

Código-fonte Python em uma tela – algoritmos são instruções precisas e ordenadas
Código-fonte Python em uma tela – algoritmos são instruções precisas e ordenadas

Um algoritmo não é a mesma coisa que código. Além de linguagens de programação visuais e textuais, um algoritmo pode ser expresso de uma variedade de maneiras: em linguagem natural (frases comuns), como um diagrama tal como um fluxograma, ou em pseudocódigo. Essas formas são para pessoas – elas permitem verificar a lógica e concordar com ela antes de qualquer linguagem ser escolhida, e o mesmo algoritmo pode então ser escrito em qualquer linguagem.

Quando você realmente o escreve em uma linguagem de programação, claridade e legibilidade são considerações importantes, não decoração: nomes de variáveis significativos, indentação consistente e comentários explicando por que em vez de o quê. O programa terá de ser lido e modificado depois por alguém — muitas vezes você mesmo — e um algoritmo ninguém consegue entender não pode ser mantido ou depurado.

Um algoritmo 算法 é uma sequência finita de passos que resolve um problema, construído a partir de sequenciamento, seleção e iteração. Diferentes algoritmos podem resolver o mesmo problema, e você deve ser capaz de combinar e modificar algoritmos existentes (por exemplo, contar os valores em uma lista que atendem a uma condição, ou encontrar o maior). Rastreie um algoritmo à mão para verificar se está correto.

Um fluxograma descreve um algoritmo usando os símbolos padrão
Um fluxograma descreve um algoritmo usando os símbolos padrão
3.10

Listas

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.N: Para operações de lista: a. Escreva expressões que usem indexação de lista e procedimentos de lista. [Habilidade 2.B] b. Avalie expressões que usem indexação de lista e procedimentos de lista. [Habilidade 4.B]

  • AAP-2.N.1 A folha de referência do exame fornece operações básicas em listas, incluindo:

    • acessar um elemento pelo índice

      Texto:

      aList[i]

      Bloco:

      aList i

      acessa o elemento de aList no índice i. O primeiro elemento de aList está no índice 1 e é acessado usando a notação aList[1].

    • atribuir um valor de um elemento de uma lista a uma variável

      Texto:

      x ← aList[i]

      Bloco:

      x ← aList i

      atribui o valor de aList[i] à variável x.

    • atribuir um valor a um elemento de uma lista

      Texto:

      aList[i] ← x

      Bloco:

      aList i ← x

      atribui o valor de x a aList[i].

      Texto:

      aList[i] ← aList[j]

      Bloco:

      aList i ← aList j

      atribui o valor de aList[j] a aList[i].

    • inserir elementos em um índice específico

      Texto:

      INSERT(aList, i, value)

      Bloco:

      INSERT aList, i, value

      desloca para a direita quaisquer valores em aList nos índices maiores ou iguais a i. O comprimento da lista é aumentado em 1, e value é colocado no índice i em aList.

    • adicionar elementos ao final da lista

      Texto:

      APPEND(aList, value)

      Bloco:

      APPEND aList, value

      aumenta o comprimento de aList em 1, e value é colocado no final de aList.

    • remover elementos

      Texto:

      REMOVE(aList, i)

      Bloco:

      REMOVE aList, i

      remove o item no índice i em aList e desloca para a esquerda quaisquer valores nos índices maiores que i. O comprimento de aList é reduzido em 1.

    • determinar o comprimento de uma lista

      Texto:

      LENGTH(aList)

      Bloco:

      LENGTH aList

    avalia para o número de elementos atualmente em aList.

  • AAP-2.N.2 Procedimentos de lista são implementados de acordo com as regras de sintaxe da linguagem de programação.

Objetivo de Aprendizagem AAP-2.O: Para algoritmos envolvendo elementos de uma lista: a. Escreva instruções de iteração para percorrer uma lista. [Habilidade 2.B] b. Determine o resultado de um algoritmo que inclui travessias de lista. [Habilidade 4.B]

  • AAP-2.O.1 Percorrer uma lista pode ser uma travessia completa, onde todos os elementos da lista são acessados, ou uma travessia parcial, onde apenas uma parte dos elementos é acessada.

    • Declaração de exclusão (EK AAP-2.O.1): Percorrer várias listas simultaneamente usando o mesmo índice para ambas (travessias paralelas) está fora do escopo deste curso e do Exame AP.
  • AAP-2.O.2 Instruções de iteração podem ser usadas para percorrer uma lista.

  • AAP-2.O.3 A folha de referência do exame fornece

    Texto:

    FOR EACH item IN aList { <block of statements> }

    Bloco:

    FOR EACH item IN aList block of statements

    A variável item recebe o valor de cada elemento de aList sequencialmente, em ordem, do primeiro elemento ao último elemento. O código em block of statements é executado uma vez para cada atribuição de item.

  • AAP-2.O.4 O conhecimento de algoritmos existentes que usam iteração pode ajudar na construção de novos algoritmos. Alguns exemplos de algoritmos existentes frequentemente usados com listas incluem:

    • determinar um valor mínimo ou máximo em uma lista
    • calcular uma soma ou média de uma lista de números
  • AAP-2.O.5 Algoritmos de busca linear ou busca sequencial verificam cada elemento de uma lista, em ordem, até que o valor desejado seja encontrado ou todos os elementos da lista tenham sido verificados.

Fonte: College Board AP Course and Exam Description

Uma lista 列表 é uma coleção ordenada de valores sob um único nome, a principal abstração de dados do curso. A pseudocódigo AP indexa a partir de 1:

Uma lista armazena muitos valores em uma única variável, cada um encontrado pelo seu índice
Uma lista armazena muitos valores em uma única variável, cada um encontrado pelo seu índice
scores ← [88, 74, 95]
DISPLAY(scores[1])          // 88
scores[2] ← 80              // replace the 2nd value
APPEND(scores, 60)          // add to the end
INSERT(scores, 1, 100)      // insert at index 1
REMOVE(scores, 3)           // delete the 3rd element
LENGTH(scores)              // how many elements

Percorra uma lista com um laço para somar, contar, pesquisar ou encontrar um máximo:

FOR EACH x IN scores
{
    total ← total + x
}
Vocabulário Treinar
Inglês Chinês Pinyin
list/lɪst/ 列表 liè biǎo
3.11

Busca Binária

Programa

Compreensão Permanente (AAP-2): A maneira como as instruções são sequenciadas e combinadas em um programa determina o resultado computado. Os programas incorporam estruturas de iteração e seleção para representar repetições e tomar decisões para lidar com valores de entrada variados.

Objetivo de Aprendizagem AAP-2.P: Para algoritmos de busca binária: a. Determinar o número de iterações necessárias para encontrar um valor em um conjunto de dados. [Habilidade 1.D] b. Explicar os requisitos necessários para completar uma busca binária. [Habilidade 1.A]

  • AAP-2.P.1 O algoritmo de busca binária começa no meio de um conjunto de dados numéricos ordenados e elimina metade dos dados; este processo se repete até que o valor desejado seja encontrado ou todos os elementos tenham sido eliminados.
    • Declaração de exclusão (EK AAP-2.P.1): Implementações específicas da busca binária estão fora do escopo do curso e do Exame AP.
  • AAP-2.P.2 Os dados devem estar em ordem ordenada para usar o algoritmo de busca binária.
  • AAP-2.P.3 A busca binária é geralmente mais eficiente do que a busca sequencial/linear quando aplicada a dados ordenados.

Fonte: College Board AP Course and Exam Description

Um telefone: a busca binária reduz pela metade as páginas restantes a cada passo
Um telefone: a busca binária reduz pela metade as páginas restantes a cada passo

Busca binária 二分搜索 encontra um valor em uma lista ordenada muito mais rápido do que verificar cada elemento. Ela olha para o elemento do meio, depois descarta a metade que não pode conter o alvo, repetindo até encontrar. Cada passo reduz pela metade o espaço de busca, então uma lista de $n$ itens leva cerca de $\log_2 n$ passos. Ela requer que os dados estejam ordenados primeiro.

A busca binária reduz o intervalo a cada passo (a lista deve estar ordenada)
A busca binária reduz o intervalo a cada passo (a lista deve estar ordenada)

Exemplo resolvido. Procurando em uma lista ordenada de $8$ itens, a busca binária reduz o intervalo a cada passo: $8\rightarrow4\rightarrow2\rightarrow1$, no máximo $3$ comparações ($\log_2 8=3$), enquanto uma busca linear poderia levar até $8$. A vantagem cresce exponencialmente: cerca de $1{,}000$ itens precisam apenas de $\approx10$ passos de busca binária (mas até $1{,}000$ lineares), e $1{,}000{,}000$ itens precisam de apenas $\approx20$. Reduzir pela metade é o que torna isso um algoritmo de tempo razoável.

Vocabulário Treinar
Inglês Chinês Pinyin
Binary search/ˈbaɪnəri sɜːtʃ/ 二分搜索 èr fēn sōu suǒ
3.12

Chamada de Procedimentos

Programa

Compreensão Permanente (AAP-3): Programadores dividem problemas em pedaços menores e mais gerenciáveis. Ao criar procedimentos e explorar parâmetros, programadores generalizam processos que podem ser reutilizados. Procedimentos permitem que programadores utilizem código existente que já foi testado, permitindo que escrevam programas mais rapidamente e com mais confiança.

Objetivo de Aprendizagem AAP-3.A: Para chamadas de procedimentos: a. Escreva instruções para chamar procedimentos. [Habilidade 3.B] b. Determine o resultado ou efeito de uma chamada de procedimento. [Habilidade 4.B]

  • AAP-3.A.1 Um procedimento é um grupo nomeado de instruções de programação que pode ter parâmetros e valores de retorno.

  • AAP-3.A.2 Procedimentos são referidos por diferentes nomes, como método ou função, dependendo da linguagem de programação.

  • AAP-3.A.3 Parâmetros são variáveis de entrada de um procedimento. Argumentos especificam os valores dos parâmetros quando um procedimento é chamado.

  • AAP-3.A.4 Uma chamada de procedimento interrompe a execução sequencial de instruções, fazendo com que o programa execute as instruções dentro do procedimento antes de continuar. Após a execução da última instrução no procedimento (ou de uma instrução de retorno), o fluxo de controle retorna ao ponto imediatamente após onde o procedimento foi chamado.

  • AAP-3.A.5 A folha de referência do exame fornece

    procName(arg1, arg2, ...)

    como uma forma de chamar

    Texto:

    PROCEDURE procName(parameter1, parameter2, ...) { <block of statements> }

    Bloco:

    PROCEDURE procName parameter1, parameter2,... block of statements

    que aceita zero ou mais argumentos; arg1 é atribuído a parameter1, arg2 é atribuído a parameter2, e assim por diante.

  • AAP-3.A.6 A folha de referência do exame fornece o procedimento

    Texto:

    DISPLAY(expression)

    Bloco:

    DISPLAY expression

    para exibir o valor de expression, seguido por um espaço.

  • AAP-3.A.7 A folha de referência do exame fornece a instrução

    Texto:

    RETURN(expression)

    Bloco:

    RETURN expression

    , que é usada para retornar o fluxo de controle ao ponto onde o procedimento foi chamado e para retornar o valor de expression.

  • AAP-3.A.8 A folha de referência do exame fornece

    result ← procName(arg1, arg2, ...)

    para atribuir a result o "valor do procedimento" sendo retornado pela chamada

    Texto:

    PROCEDURE procName(parameter1, parameter2, ...) { <block of statements> RETURN(expression) }

    Bloco:

    PROCEDURE procName parameter1, parameter2,... block of statements RETURN expression

  • AAP-3.A.9 A folha de referência do exame fornece o procedimento

    Texto:

    INPUT()

    Bloco:

    INPUT

    que aceita um valor do usuário e retorna o valor de entrada.

Fonte: College Board AP Course and Exam Description

Um procedimento (função) 过程 é um bloco de código nomeado e reutilizável. Chamar-o executa seu código com os argumentos que você fornece, e ele pode retornar um valor:

sum ← Add(3, 4)      // call, passing 3 and 4

Procedimentos permitem que você use código sem conhecer seus detalhes internos — abstração procedural 过程抽象.

3.13

Desenvolvimento de Procedimentos

Programa

Compreensão Permanente (AAP-3): Programadores dividem problemas em pedaços menores e mais gerenciáveis. Ao criar procedimentos e explorar parâmetros, programadores generalizam processos que podem ser reutilizados. Procedimentos permitem que programadores utilizem código existente que já foi testado, permitindo que escrevam programas mais rapidamente e com mais confiança.

Objetivo de Aprendizagem AAP-3.B: Explicar como o uso de abstração procedural gerencia a complexidade em um programa. [Habilidade 3.C]

  • AAP-3.B.1 Um tipo comum de abstração é a abstração procedural, que fornece um nome para um processo e permite que um procedimento seja usado sabendo apenas o que ele faz, não como ele faz isso.
  • AAP-3.B.2 A abstração procedural permite que uma solução para um problema grande seja baseada nas soluções de subproblemas menores. Isso é conseguido criando procedimentos para resolver cada um dos subproblemas.
  • AAP-3.B.3 A subdivisão de um programa de computador em subprogramas separados é chamada de modularidade.
  • AAP-3.B.4 Uma abstração procedural pode extrair recursos compartilhados para generalizar funcionalidade em vez de duplicar código. Isso permite a reutilização de código do programa, o que ajuda a gerenciar a complexidade.
  • AAP-3.B.5 O uso de parâmetros permite que procedimentos sejam generalizados, habilitando-os a serem reutilizados com uma faixa de valores de entrada ou argumentos.
  • AAP-3.B.6 O uso de abstração procedural ajuda a melhorar a legibilidade do código.
  • AAP-3.B.7 O uso de abstração procedural em um programa permite que programadores alterem os detalhes internos do procedimento (para torná-lo mais rápido, mais eficiente, usar menos armazenamento, etc.) sem precisar notificar os usuários da mudança, desde que o que o procedimento faz seja preservado.

Objetivo de Aprendizagem AAP-3.C: Desenvolver abstrações procedurais para gerenciar a complexidade em um programa escrevendo procedimentos. [Habilidade 3.B]

  • AAP-3.C.1 A folha de referência do exame fornece

    Texto:

    PROCEDURE procName(parameter1, parameter2, ...) { <block of statements> }

    Bloco:

    PROCEDURE procName parameter1, parameter2,... block of statements

    que é usado para definir um procedimento que aceita zero ou mais argumentos. O procedimento contém block of statements.

  • AAP-3.C.2 A folha de referência do exame fornece

    Texto:

    PROCEDURE procName(parameter1, parameter2, ...) { <block of statements> RETURN(expression) }

    Bloco:

    PROCEDURE procName parameter1, parameter2,... block of statements RETURN expression

    que é usado para definir um procedimento que aceita zero ou mais argumentos. O procedimento contém block of statements e retorna o valor de expression. A instrução RETURN pode aparecer em qualquer ponto dentro do procedimento e causa um retorno imediato do procedimento de volta à instrução de chamada.

Fonte: College Board AP Course and Exam Description

Você define um procedimento com um nome, parâmetros (entradas) e um corpo, e opcionalmente RETURN um resultado:

Decompondo um programa em procedimentos e sub-procedimentos
Decompondo um programa em procedimentos e sub-procedimentos
PROCEDURE Add(a, b)
{
    RETURN(a + b)
}

Escrever seus próprios procedimentos reduz a repetição, divide um grande problema em peças nomeadas e torna os programas legíveis e mais fáceis de testar — a essência da abstração 抽象.

Vocabulário Treinar
Inglês Chinês Pinyin
procedure (function)/prəˈsiːdʒə/ 过程 guò chéng
procedural abstraction/prəˈsiːdʒərəl əbˈstrækʃn/ 过程抽象 guò chéng chōu xiàng
abstraction/əbˈstrækʃn/ 抽象 chōu xiàng
library/ˈlaɪbrəri/ 库 kù
simulation/ˌsɪmjʊˈleɪʃn/ 模拟 mó nǐ
Efficiency/ɪˈfɪʃənsi/ 效率 xiào lǜ
heuristic/hjuːˈrɪstɪk/ 启发式 qǐ fā shì
undecidable/ˌʌndɪˈsaɪdəbl/ 不可判定 bù kě pàn dìng
3.14

Bibliotecas

Programa

Compreensão Permanente (AAP-3): Programadores dividem problemas em pedaços menores e mais gerenciáveis. Ao criar procedimentos e explorar parâmetros, programadores generalizam processos que podem ser reutilizados. Procedimentos permitem que programadores utilizem código existente que já foi testado, permitindo que escrevam programas mais rapidamente e com mais confiança.

Objetivo de Aprendizagem AAP-3.D: Selecionar bibliotecas apropriadas ou segmentos de código existentes para usar na criação de novos programas. [Habilidade 2.B]

  • AAP-3.D.1 Uma biblioteca de software contém procedimentos que podem ser usados na criação de novos programas.
  • AAP-3.D.2 Segmentos de código existentes podem provenir de fontes internas ou externas, como bibliotecas ou código escrito anteriormente.
  • AAP-3.D.3 O uso de bibliotecas simplifica a tarefa de criar programas complexos.
  • AAP-3.D.4 Interfaces de programação de aplicativos (APIs) são especificações sobre o comportamento e a utilização dos procedimentos em uma biblioteca.
  • AAP-3.D.5 A documentação de uma API/biblioteca é necessária para compreender os comportamentos fornecidos pela API/biblioteca e como utilizá-los.

Fonte: College Board AP Course and Exam Description

Uma biblioteca 库 é uma coleção de procedimentos prontos que outros podem reutilizar. Uma API (Interface de Programação de Aplicativos) 应用程序接口 documenta o que cada procedimento faz, seus parâmetros e seu resultado — para que você possa usá-lo sem ver seu código. Bibliotecas economizam tempo e permitem construir sobre trabalho existente e testado.

A documentação é parte da biblioteca. A documentação para uma API ou biblioteca é necessária para compreender os comportamentos que ela oferece e como usá-los — o que cada procedimento espera como parâmetro, o que retorna e o que faz nas bordas. Sem ela, você teria que ler o código-fonte, o que anula o ponto da abstração; com ela, você pode usar um procedimento corretamente sem saber como funciona internamente.

Vocabulário Treinar
Inglês Chinês Pinyin
Interface/ˈɪntəfeɪs/ 应用程序接口 yìng yòng chéng xù jiē kǒu
3.15

Valores Aleatórios

Programa

Compreensão Permanente (AAP-3): Programadores dividem problemas em pedaços menores e mais gerenciáveis. Ao criar procedimentos e explorar parâmetros, programadores generalizam processos que podem ser reutilizados. Procedimentos permitem que programadores utilizem código existente que já foi testado, permitindo que escrevam programas mais rapidamente e com mais confiança.

Objetivo de Aprendizagem AAP-3.E: Para gerar valores aleatórios: a. Escreva expressões para gerar possíveis valores. [Habilidade 2.B] b. Avalie expressões para determinar os resultados possíveis. [Habilidade 4.B]

  • AAP-3.E.1 A folha de referência do exame fornece

    Texto:

    RANDOM(a, b)

    Bloco:

    RANDOM a, b

    que gera e retorna um número inteiro aleatório de a a b, inclusive. Cada resultado tem igual probabilidade de ocorrer. Por exemplo, RANDOM(1, 3) pode retornar 1, 2 ou 3.

  • AAP-3.E.2 O uso de geração de números aleatórios em um programa significa que cada execução pode produzir um resultado diferente.

Fonte: College Board AP Course and Exam Description

RANDOM(a, b) retorna um número aleatório inteiro de a a b (inclusivo), permitindo que um programa produza resultados imprevisíveis — para jogos, amostragem ou simulações. Cada chamada pode dar um valor diferente, então um programa que usa aleatoriedade se comporta de forma diferente a cada execução.

3.16

Simulações

Programa

Compreensão Permanente (AAP-3): Programadores dividem problemas em pedaços menores e mais gerenciáveis. Ao criar procedimentos e explorar parâmetros, programadores generalizam processos que podem ser reutilizados. Procedimentos permitem que programadores utilizem código existente que já foi testado, permitindo que escrevam programas mais rapidamente e com mais confiança.

Objetivo de Aprendizagem AAP-3.F: Para simulações: a. Explique como os computadores podem ser usados para representar fenômenos ou resultados do mundo real. [Habilidade 1.A] b. Compare simulações com contextos do mundo real. [Habilidade 1.D]

  • AAP-3.F.1 Simulações são abstrações de objetos ou fenômenos mais complexos para um propósito específico.
  • AAP-3.F.2 Uma simulação é uma representação que usa conjuntos variáveis de valores para refletir o estado mutável de um fenômeno.
  • AAP-3.F.3 Simulações frequentemente imitam eventos do mundo real com o objetivo de tirar inferências, permitindo a investigação de um fenômeno sem as limitações do mundo real.
  • AAP-3.F.4 O processo de desenvolvimento de uma simulação abstrata envolve a remoção de detalhes específicos ou a simplificação da funcionalidade.
  • AAP-3.F.5 Simulações podem conter vieses derivados das escolhas de elementos do mundo real que foram incluídos ou excluídos.
  • AAP-3.F.6 Simulações são mais úteis quando eventos do mundo real são impraticáveis para experimentos (ex.: muito grandes, muito pequenos, muito rápidos, muito lentos, muito caros ou muito perigosos).
  • AAP-3.F.7 Simulações facilitam a formulação e refinamento de hipóteses relacionadas aos objetos ou fenômenos em consideração.
  • AAP-3.F.8 Geradores de números aleatórios podem ser usados para simular a variabilidade existente no mundo real.

Fonte: College Board AP Course and Exam Description

Uma simulação 模拟 é um programa que modela um processo do mundo real para estudá-lo de forma segura e econômica. Simulações simplificam a realidade (elas omitem detalhes) e frequentemente usam aleatoriedade para imitar eventos casuais. Elas permitem testar cenários que seriam muito caros, lentos ou perigosos na vida real — mas seus resultados são tão bons quanto suas premissas.

Uma simulação é uma forma de fazer ciência, não apenas uma imagem. Como pode ser executada muitas vezes, economicamente e com uma variável alterada por vez, uma simulação facilita a formulação e refinamento de hipóteses sobre o objeto ou fenômeno em questão: você propõe uma explicação, executa o modelo, compara o resultado com a realidade e ajusta ou a hipótese ou o modelo. É por isso que as simplificações de uma simulação importam — um resultado só sustenta uma hipótese sobre o mundo real na medida em que o que foi omitido não importa.

3.17

Eficiência Algorítmica

Programa

Compreensão Duradoura (AAP-4): Existem problemas que computadores não podem resolver e, mesmo quando um computador pode resolver um problema, ele pode não conseguir fazê-lo em um tempo razoável.

Objetivo de Aprendizagem AAP-4.A: Para determinar a eficiência de um algoritmo: a. Explique a diferença entre algoritmos que executam em tempo razoável e aqueles que não executam. [Habilidade 1.D] b. Identifique situações onde uma solução heurística pode ser mais apropriada. [Habilidade 1.D]

  • AAP-4.A.1 Um problema é uma descrição geral de uma tarefa que pode (ou não pode) ser resolvida algoritmicamente. Uma instância de um problema também inclui entrada específica. Por exemplo, ordenação é um problema; ordenar a lista (2,3,1,7) é uma instância do problema.
  • AAP-4.A.2 Um problema de decisão é um problema com resposta sim/não (ex.: existe um caminho de A para B?). Um problema de otimização é um problema com o objetivo de encontrar a solução "melhor" entre muitas (ex.: qual é o caminho mais curto de A para B?).
  • AAP-4.A.3 Eficiência é uma estimativa da quantidade de recursos computacionais utilizados por um algoritmo. A eficiência é tipicamente expressa como uma função do tamanho da entrada.
    • Declaração de exclusão (EK AAP-4.A.3): Análise formal de algoritmos (Big-O) e raciocínio formal usando fórmulas matemáticas estão fora do escopo deste curso e do Exame AP.
  • AAP-4.A.4 A eficiência de um algoritmo é determinada através de raciocínio formal ou matemático.
  • AAP-4.A.5 A eficiência de um algoritmo pode ser medida informalmente determinando o número de vezes que uma declaração ou grupo de declarações é executado.
  • AAP-4.A.6 Diferentes algoritmos corretos para o mesmo problema podem ter diferentes eficiências.
  • AAP-4.A.7 Algoritmos com eficiência polinomial ou mais lenta (constante, linear, quadrática, cúbica, etc.) dizem-se executar em um tempo razoável. Algoritmos com eficiências exponenciais ou fatoriais são exemplos de algoritmos que executam em um *tempo irrazoável.
  • AAP-4.A.8 Alguns problemas não podem ser resolvidos em um tempo razoável porque não há algoritmo eficiente para resolvê-los. Nestes casos, buscam-se soluções aproximadas.
  • AAP-4.A.9 Uma heurística é uma abordagem para um problema que produz uma solução que não é garantida como ótima, mas pode ser usada quando técnicas que são garantidas para sempre encontrar uma solução ótima são impraticáveis.
    • Declaração de exclusão (AAP-4.A.9): Soluções heurísticas específicas estão fora do escopo deste curso e do Exame AP.

Fonte: College Board AP Course and Exam Description

Eficiência 效率 é quanto tempo (ou memória) um algoritmo precisa conforme sua entrada aumenta. Um algoritmo de tempo razoável tem seu trabalho crescendo como um polinômio do tamanho da entrada (ex.: linear ou quadrático); um algoritmo de tempo irrazoável cresce muito mais rápido (ex.: dobrando com cada item adicionado), tornando-se impraticável para entradas grandes. Um algoritmo mais rápido pode tornar um problema antes impossível solvable. Às vezes, uma resposta exata leva muito tempo, então uma heurística 启发式 – uma abordagem que encontra uma resposta boa o suficiente rapidamente – é usada em vez disso.

Como o tempo de execução de um algoritmo cresce com o tamanho da entrada n
Como o tempo de execução de um algoritmo cresce com o tamanho da entrada n
3.18

Problemas Indecidíveis

Programa

Compreensão Duradoura (AAP-4): Existem problemas que computadores não podem resolver e, mesmo quando um computador pode resolver um problema, ele pode não conseguir fazê-lo em um tempo razoável.

Objetivo de Aprendizagem AAP-4.B: Explique a existência de problemas indecidíveis em ciência da computação. [Habilidade 1.A]

  • AAP-4.B.1 Um problema decidível é um problema de decisão para o qual um algoritmo pode ser escrito para produzir uma saída correta para todas as entradas (ex.: "O número é par?").
  • AAP-4.B.2 Um problema indecidível é aquele para o qual nenhum algoritmo pode ser construído que seja sempre capaz de fornecer uma resposta correta de sim ou não.
    • Declaração de exclusão (EK AAP-4.B.2): Determinar se um dado problema é indecidível está fora do escopo deste curso e do Exame AP.
  • AAP-4.B.3 Um problema indecidível pode ter algumas instâncias que possuem solução algorítmica, mas não há solução algorítmica que possa resolver todas as instâncias do problema.

Fonte: College Board AP Course and Exam Description

Alguns problemas são ind decidíveis 不可判定: nenhum algoritmo pode resolver todos os casos deles com uma resposta correta de sim/não. Este é um limite fundamental da computação — não uma questão de precisar de um computador mais rápido, mas uma prova de que tal algoritmo não pode existir.

Habilidade de exame: seja capaz de determinar o resultado de um segmento de código rastreado, comparar a eficiência de dois algoritmos (tempo razoável vs. irrazoável) e reconhecer abstração procedural e de dados em um programa.

3.18

Dicas de prova

  • Saiba que uma variável é um armazenamento nomeado para um valor e rastreie como a atribuição a atualiza passo a passo.
  • Leia cuidadosamente o pseudocódigo AP — a <- expression atribui, e listas são indexadas a partir de 1 na folha de referência do exame.
  • Distinga uma variável de uma lista (uma coleção acessada por índice) e use operações de lista corretamente.
  • Avalie expressões com a precedência correta e lógica booleana (AND, OR, NOT).
  • Escolha nomes de variáveis claros e significativos — as tarefas escritas recompodam código legível.

Aulas interativas sobre este tópico

Passe por ele passo a passo, com exercícios de verificação instantânea.

Provas Anteriores

Mais tópicos em Princípios de Ciência da Computação do AP

Entrar ou criar conta

IGCSE, A-Level & AP