Simple Science

Ciência de ponta explicada de forma simples

# Informática# Computação distribuída, paralela e em cluster

Conceitos Básicos de Programação Simplificados

Aprenda termos e ideias essenciais de programação em uma linguagem simples.

― 5 min ler


Fundamentos deFundamentos deProgramação Explicadosprogramação.Termos essenciais para iniciantes em
Índice

No mundo da programação, existem algumas ideias e termos básicos que ajudam a gente a escrever e entender código melhor. Este artigo tem como objetivo explicar alguns desses conceitos de forma simples.

O que é uma Variável?

Uma variável é como um recipiente que guarda dados. Pense nisso como uma caixa onde você pode armazenar coisas diferentes. Você pode dar um nome pra caixa pra conseguir encontrá-la mais fácil depois. Por exemplo, se você quer acompanhar quantas maçãs você tem, pode criar uma variável chamada maçãs e definir ela como um número tipo 5.

Usando Constantes

Uma constante é parecida com uma variável, mas depois que você define seu valor, não dá pra mudar. Isso é útil quando você tem um valor que deve permanecer o mesmo durante o seu programa. Por exemplo, se você quer definir o número de dias em uma semana, poderia usar uma constante chamada DIAS_EM_UMA_SEMANA e definir ela como 7.

Listas e Arrays

Às vezes, você precisa armazenar várias informações juntas. É aí que entram as listas e arrays. Elas permitem que você mantenha uma coleção de itens sob um único nome. Por exemplo, você poderia ter uma lista de frutas como frutas = [‘maçã’, ‘banana’, ‘laranja’].

Funções e Procedimentos

Funções e procedimentos são blocos de código que realizam uma tarefa específica. Você pode pensar neles como receitas que dizem ao programa o que fazer. Quando você quer usar uma função ou procedimento, é só chamá-lo pelo nome.

O que é uma Função?

Uma função geralmente recebe alguma entrada, faz algo com isso e depois dá um resultado de volta. Por exemplo, você pode ter uma função chamada adicionarNumeros que pega dois números, soma eles e depois retorna a soma.

O que é um Procedimento?

Um procedimento é parecido, mas pode não retornar um valor. Ele realiza uma ação, mas não devolve nada. Por exemplo, você pode ter um procedimento que imprime uma mensagem de boas-vindas na tela.

Entendendo Tipos de Dados

Os tipos de dados são categorias que nos dizem que tipo de dado estamos trabalhando. Tipos de dados comuns incluem:

  • Inteiros: Números inteiros como 1, 2 ou 100.
  • Floats: Números decimais como 3.14 ou 0.5.
  • Strings: Texto entre aspas, como "Olá" ou "Mundo".
  • Booleanos: Valores verdadeiro ou falso, como true ou false.

Cada tipo de dado serve a um propósito diferente e ajuda o programa a saber como lidar com os valores.

Estruturas de Controle

As estruturas de controle nos permitem controlar o fluxo do nosso programa. Elas deixam a gente decidir o que fazer com base em certas condições.

If Statements

Uma instrução if verifica se uma condição é verdadeira ou falsa. Se for verdadeira, o programa faz uma coisa; se for falsa, pode fazer outra. Por exemplo:

if (numero > 10) {
    print("Número é maior que 10")
} else {
    print("Número é 10 ou menor")
}

Loops

Loops são usados pra repetir um bloco de código várias vezes. Existem diferentes tipos de loops, mas um comum é o for loop, que passa por uma lista ou intervalo de números.

for (i = 0; i < 5; i++) {
    print(i)
}

Esse loop vai imprimir os números 0 a 4.

Tratamento de Erros

Erros podem acontecer na programação, e é importante lidar com eles. O tratamento de erros é uma forma de gerenciar problemas pra que seu programa não quebre.

Try e Catch

Você pode usar um bloco try-catch pra tratar erros. O código tenta rodar o que está na seção try, e se acontecer um erro, ele vai pra seção catch pra lidar com o erro.

try {
    // Código que pode causar um erro
} catch (erro) {
    // Código pra lidar com o erro
}

Algoritmos

Um algoritmo é um conjunto de instruções passo a passo pra resolver um problema ou completar uma tarefa. Pense nisso como uma receita que diz exatamente o que fazer do início ao fim.

Exemplo de um Algoritmo Simples

Vamos supor que você quer encontrar o maior número em uma lista. Um algoritmo poderia ser assim:

  1. Comece com o primeiro número como o maior.
  2. Compare o maior número com cada número da lista.
  3. Se um número for maior, atualize o maior número.
  4. Depois que você checar todos os números, o maior número é sua resposta.

Estruturas de Dados

As estruturas de dados são formas de organizar e armazenar dados em um programa. Elas ajudam a manter nossos dados organizados e acessíveis.

Estruturas de Dados Comuns

  • Arrays: Uma lista de itens de tamanho fixo.
  • Listas Ligadas: Uma coleção de itens onde cada item aponta para o próximo.
  • Árvores: Uma estrutura que se ramifica, com um item principal no topo e outros itens abaixo.
  • Dicionários: Uma coleção de pares chave-valor, onde você pode procurar um valor com base na sua chave.

Conclusão

Programar pode parecer complicado no começo, mas dividindo em conceitos simples, fica mais fácil de entender. Compreender Variáveis, funções, estruturas de controle, algoritmos e estruturas de dados é fundamental pra escrever e entender código. Com esses básicos, qualquer um pode começar sua jornada na programação e, eventualmente, construir projetos mais complexos. A chave é ir passo a passo, praticar e não ter medo de cometer erros.

Fonte original

Título: Efficient Signature-Free Validated Agreement

Resumo: Byzantine agreement enables n processes to agree on a common L-bit value, despite up to t > 0 arbitrary failures. A long line of work has been dedicated to improving the bit complexity of Byzantine agreement in synchrony. This has culminated in COOL, an error-free (deterministically secure against a computationally unbounded adversary) solution that achieves O(nL + n^2 logn) worst-case bit complexity (which is optimal for L >= n logn according to the Dolev-Reischuk lower bound). COOL satisfies strong unanimity: if all correct processes propose the same value, only that value can be decided. Strong unanimity is, however, not sufficient for today's state machine replication (SMR) and blockchain protocols. These systems value progress and require a decided value to always be valid, excluding default decisions (such as EMPTY) even in cases where there is no unanimity a priori. Validated Byzantine agreement satisfies this property (called external validity). Yet, the best error-free (or even signature-free) validated agreement solutions achieve only O(n^2L) bit complexity, a far cry from the Omega(nL + n^2) Dolev-Reishcuk lower bound. In this paper, we present two new synchronous algorithms for validated Byzantine agreement, HashExt and ErrorFreeExt, with different trade-offs. Both algorithms are (1) signature-free, (2) optimally resilient (tolerate up to t < n / 3 failures), and (3) early-stopping (terminate in O(f+1) rounds, where f = n^2 kappa (where kappa is the size of a hash). On the other hand, ErrorFreeExt is error-free, using no cryptography whatsoever, and achieves O( (nL + n^2) logn ) bit complexity, which is near-optimal for any L.

Autores: Pierre Civit, Muhammad Ayaz Dzulfikar, Seth Gilbert, Rachid Guerraoui, Jovan Komatovic, Manuel Vidigueira, Igor Zablotchi

Última atualização: 2024-08-20 00:00:00

Idioma: English

Fonte URL: https://arxiv.org/abs/2403.08374

Fonte PDF: https://arxiv.org/pdf/2403.08374

Licença: https://creativecommons.org/licenses/by/4.0/

Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.

Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.

Mais de autores

Artigos semelhantes