Introduções aos Algoritmos
Esses são os passos necessários para aprender o algoritmo de uma linguagem de programação:
Algoritmo Básico/Intermediário
- Estrutura básica de um programa (incluindo a função de bibliotecas básicas) e saída com a frase "Olá Mundo" ou equivalente.
- Variáveis e constantes (tipos de dados, atribuição múltipla, atribuição com adição, escopo global e local). Faça com todos os tipos comuns (em linguagens POO pode utilizar também classes invólucro dos mesmos, em linguagens dinâmicas também identificar tipos de variáveis). Comentários de uma e várias linhas.
- Métodos de entrada e saída de dados com os tipos int, float, char e string, mudança de imagens, textos e números, incluindo tratamento de acentos e remoção de espaços.
- Métodos básicos (formatação, concatenações, conversões de tipos de dados, typecasts e identificação de variáveis, incluindo verificação se um dado é válido como número).
- Operadores aritméticos. Faça um programa que realize cálculos com adição, subtração, multiplicação, divisão e resto. Faça também um programa que calcule a média, mostrando a ordem de precedência.
- Manipulação de dados (formatação de textos e números e inversão de valores). Refaça o programa de saudação com texto formatado (versão linha de comando).
- Operadores lógicos (AND, OR, NOT, XOR) e relacionais (igual, diferente, menor, maior, igual e menor, igual e maior). Use alguns desses em exemplos com laços de repetição e condicionais.
- Condicionais (Operador ternário, IF e ELSE, SWITCH CASE). Faça por exemplo, um verificador de número par e ímpar e um que verifica vogais, consoantes e semivogais.
- Repetições (WHILE, DO WHILE E FOR), incluindo aplicações com break e continue num loop infinito, ou dupla condição de parada com AND. Crie laços com números, podendo ter uma entrada.
- Listas, Arrays (Vetores, incluindo os associativos, e Matrizes, incluindo ordenações de ambos, exibição com for iterator e função forEach, contagem usando métodos como count, sizeof ou length, adição e remoção de elementos, exibição de apenas um índice em matrizes/listas compostas e localização e verificação se existe elemento com if e in, cópia). Faça arrays/listas/vectores com letras, textos e números. Fazer exemplo de Pilha e Fila.
- Funções (incluindo retorno, parâmetros (incluindo com vetores/listas), inicialização de parâmetros, escopo de variáveis, recursividade e sobrecarga), Eventos (cliques, mouse, system, navegação por pastas), Expressões Anônimas (Lambdas) e tipos genéricos. Crie funções para alguns dos programas citados, podendo ser em outros arquivos de código-fonte.
- Operadores tipo Math, Random e de manipulação de datas. Crie funções que utilizem esses métodos (caso a linguagem não tenha a função cbrt, caso de PHP e Python, crie uma que retorne a potência do número a 1/3).
- Tratamento de erros (incluindo com exceção gerada em uma função separada), depuração, uso de memória (como alocação), ponteiros (incluindo ponteiro de ponteiros, mudança de conteúdo pelo ponteiro e manipulação de arrays), endereçamento, referenciação, enums, estruturas e unions. Faça uma depuração e depois um tratamento de erros pra verificar se um dado de entrada é númerico e um que aceite apenas um intervalo numérico que dispare uma exceção, e um função para dividir que dispare uma exceção quando tentar fazer divisão por zero. Faça uma estrutura que por uma variável, receba os dados de um endereço de casa e exiba os dados. Faça um Enum com os nomes dos números de dominó/dados representado por inteiros.
Orientação a Objetos
- Criação, instanciação e identificação de classes (criação de objetos), atributos e métodos.
- Uso de arrays, listas e outros contâiners na criação de objetos.
- Uso e manipulação de atributos e métodos estáticos (alterações sem criar objetos).
- Uso de construtores com e sem parâmetros, destrutores e delete.
- Getters, setters, encapsulamento e visibilidade de atributos e métodos.
- Uso de interface ou métodos virtuais puros (abstratos).
- Agregação de objetos (passagem de objetos por parâmetros e uso em outras classes).
- Herança (incluindo com uso de classe abstrata, e classe/métodos finais/selados).
- Polimorfismo (sobreposição, incluindo métodos virtuais e override, sobrecarga de métodos, paramétrico e de inclusão).
- Sobreposição e sobrecarga de construtores e uso de métodos de classes pais nas classes filhas.
PS: Algumas dessas coisas não existem em determinadas linguagens.