https://github.com/isaacalves7/cpp
🅲➕➕ It's a repository of C/C++ programming language and his content.
https://github.com/isaacalves7/cpp
arduino blueprint c c-language c-plus-plus cpp microcontroller microcontroller-programming unreal-engine
Last synced: 3 months ago
JSON representation
🅲➕➕ It's a repository of C/C++ programming language and his content.
- Host: GitHub
- URL: https://github.com/isaacalves7/cpp
- Owner: IsaacAlves7
- Created: 2021-08-27T03:11:55.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2025-01-10T19:49:09.000Z (3 months ago)
- Last Synced: 2025-01-10T20:35:45.306Z (3 months ago)
- Topics: arduino, blueprint, c, c-language, c-plus-plus, cpp, microcontroller, microcontroller-programming, unreal-engine
- Language: C
- Homepage:
- Size: 259 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# It's a repository of C/C++ languages 🅲
> 🅲 **Preparação**: Para este conteúdo, o aluno deverá dispor de um computador com acesso à internet, um web browser com suporte a HTML 5 (Google Chrome, Mozilla Firefox, Microsoft Edge, Safari, Opera etc.), um editor de texto ou IDE (VSCode etc.) e o software C/C++, com a versão mais recente, instalado na sua máquina local.
- https://exercism.org/tracks/c
- http://www.dpi.inpe.br/~carlos/Academicos/Cursos/LinguagemC/Cap_1.html
- https://exercism.org/tracks/cpp
- https://cplusplus.com/# 🐒 Linguagem de programação
Hoje em dia, o desenvolvimento de sistemas se baseia em vários e diferentes paradigmas, tais como os listados a seguir:
- **Imperativo (Procedural)**: Segue sequências de comandos ordenados segundo uma lógica.
- **Funcional**: Trabalha com a divisão de problemas através de funções, que resolvem separadamente problemas menores e que, ao serem organizados, resolvem o problema como um todo.
- **Lógico**: Voltado ao desenvolvimento de problemas de lógica e usado em sistemas de inteligência computacional.
- **Orientado a Objetos (OO)**: Define um conjunto de classes para dividir o problema e realiza a interação entre as diferentes classes para também resolver o problema como um todo.# 🅲 linguagem C
Uma tarefa difícil na área de computação é convencer um estudante que aprender uma nova linguagem de programação, ou usar uma linguagem que não é a preferida dele, é necessário e essencial dentro de uma disciplina. Quando se trata de uma linguagem que para alguns está ultrapassada, como a **linguagem C**, a tarefa é ainda mais difícil.
Existem muitas razões para o aprendizado de C ser fundamental. Muitos a consideram até a "mãe de todas as linguagens de programação".
Ela foi projetada para implementar o Sistema Operacional **Unix**, ficando próxima ao sistema operacional, o que a torna uma linguagem eficiente devido ao seu hábil gerenciamento de recursos no nível do sistema.
Outro ponto importante é que essa linguagem não é limitada, mas amplamente utilizada em:
- Sistemas operacionais.
- Compiladores de linguagem.
- Drivers de rede.
- Interpretadores de linguagem.
- Áreas de desenvolvimento de utilitários de sistema.
- Sistemas embarcados (embutidos).Outras vantagens da linguagem C, incluem:
- **Onipresente**: Qualquer que seja a plataforma, C provavelmente está disponível.
- **Portável**: Um programa em C compila com modificações mínimas em outras plataformas − às vezes até funciona de imediato.
- **Simples**: C é muito simples de aprender e praticamente não requer dependências. Basta um simples PC com o compilador e tudo está pronto para criar programas.### Estrutura de um programa em C e processo de compilação
**C** é uma linguagem considerada de nível intermediário e precisa de um compilador para criar um código executável e para que o programa possa funcionar em uma máquina.
Compilação é processo de tradução do código-fonte escrito para um código de máquina. É feita por um software especial conhecido como compilador, que verifica o código-fonte em busca de qualquer erro sintático ou estrutural e gera um código-objeto com extensão.obj
(no Windows) ou.o
(no Linux), se o código-fonte estiver livre de erros.Iremos utilizar um compilador para o Windows, o MinGW.
Toda a compilação é dividida em quatro etapas:
1. **Pré-processamento**.
2. **Compilação**.
3. **Montagem (assembler)**.
4. **Vinculação (linker)**.A figura 1 descreve todo o processo de compilação em C.
Figura 1: Processo de compilação de um programa
Uma **IDE**, ou **Ambiente de Desenvolvimento Integrado** (Integrated Development Environment), reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo, disponibilizando todo o processo de compilação no apertar de um botão.
### Exemplo:
Podemos detalhar o processo exemplificando a compilação em Linux de um programa em C simples como o abaixo, de nome `compilacao.c`, que escreve na tela a frase `Hello, World!`:
```c
#include
int main()
{
printf("Hello World!");
return 0;
}
```O comando `#include` serve para incluir uma biblioteca e o comando `` serve para a entrada e saída de dados;
A função `main ()` e `{}` dentro dela o comando `printf ("Ola mundo \n");`
Necessita do `;` para rodar a função!Para compilar o programa acima abre-se o prompt de comando e pressiona-se o comando abaixo:
```
gcc -save-tempscompilacao.c -o compilacao
```A opção `-save-temps` preservará e salvará todos os arquivos temporários criados durante a compilação em **C**. Ele gerará quatro arquivos no mesmo diretório:
- compilacao.i (gerado pelo pré-processador).
- compilacao.s (gerado pelo compilador).
- compilacao.o (gerado pelo montador).
- compilacao (no Linux gerado pelo linker) ou (compilacao.exe no Windows)Agora, entenda o papel de cada elemento do processo de compilaÇão:
### Pré-processador
O **pré-processador** é um pequeno software que aceita o arquivo-fonte C e executa as tarefas abaixo.- Remove comentários do código-fonte.
- Faz a expansão dos arquivos de cabeçalho incluídos.
- Gera um arquivo temporário com a extensão `.i` após o pré-processamento. Ele insere o conteúdo dos arquivos de cabeçalho no arquivo de código-fonte. O arquivo gerado pelo pré-processador é maior do que o arquivo de origem original.### Compilador
Na próxima fase da compilação C, o compilador entra em ação. Ele aceita o arquivo pré-processado temporário nome_do_arquivo.i gerado pelo pré-processador e executa as seguintes tarefas:- Verifica o programa C para erros de sintaxe.
- Traduz o arquivo em código intermediário, ou seja, em linguagem assembly.
- Otimiza,opcionalmente, o código traduzido para melhor desempenho.
- Gera um código intermediário na linguagem assembly, após a compilação, como `nome_do_arquivo.s`. É a versão de montagem do código-fonte.### Montador (Assembler)
Passando para a próxima fase de compilação, o **assembler** aceita o código-fonte compilado (`nome_do_arquivo.s`) e o traduz em código de máquina de baixo nível. Após a montagem bem-sucedida, gera o arquivo `nome_do_arquivo.o` (no Linux) ou `nome_do_arquivo.obj` (no Windows) conhecido como **arquivo objeto**. No nosso caso, gera o arquivo **compilacao.o**.### Vinculador (Linker)
Finalmente, o **linker** entra em ação e executa a tarefa final do processo de compilação. Aceita o arquivo intermediário `nome_do_arquivo.o` gerado pelo assembler.Ele liga todas as chamadas de função com sua definição original. O que significa que a função `printf ()` é vinculada à sua definição original. O **vinculador** gera o arquivo executável final.
## Variáveis e tipos de dados
Na programação, **uma variável** é **um contêiner** (área de armazenamento) para armazenar dados.Para indicar a área de armazenamento, cada variável deve receber um nome exclusivo (identificador). Os **nomes de variáveis** são apenas a representação simbólica de um local de memória.
### Exemplo:
```c
int resultado = 95;
```Aqui, resultado é uma variável do tipo **inteiro** (`int`). Para esta variável, é atribuído um valor inteiro, `95`.
O valor de uma variável pode ser alterado, como abaixo. Daí o nome, **variável**.
```c
char ch = 'a';// algum código
ch = 'l';
```## Regras para nomear uma variável
Um nome de variável pode ter letras ( A primeira letra de uma variável deve ser uma letra), dígitos e símbolo "_".
ATENÇÃO! Não há nenhuma regra sobre o tamanho que um nome de variável (identificador) pode ter. No entanto, podemos ter problemas em alguns compiladores se o nome da variável tiver mais de 31 caracteres.**C** é uma linguagem fortemente tipada ou tipificada. Isso significa que o tipo da variável não pode ser alterado depois de declarado.
### Exemplo:
```c
intnumero = 5; // variável inteiranumero = 5.5; // erro
floatnumero ; // erro
```Aqui, o tipo de variável numérica é `int`. Você não pode atribuir um valor de **ponto flutuante** (`5.5`) a essa variável. Além disso, você não pode redefinir o tipo da variável para `float`.
A propósito, para armazenar valores com casas decimais em C, você precisa declarar seu tipo paradouble
oufloat
.## Constantes
Uma **constante** é um valor (ou um identificador) cujo valor não pode ser alterado em um programa.
1, 2.5, 'c' etc.Aqui, 1, 2.5 e 'c' são constantes literais. Não se pode atribuir valores diferentes a esses termos.
constfloat PI = 3,14;
Observe que adicionamos a palavra-chave const.
Aqui, PI é uma constante simbólica. Na verdade, é uma variável, no entanto, seu valor não pode ser alterado.
### Tipos de constantes
Veja os tipos de constantes que podem ser usadas em C:
- Constantes inteiras.
- Constantes de ponto flutuante.
- Constantes de caracteres.Uma constante de caractere é criada, colocando-se um único caractere entre aspas simples.
Por exemplo: 'a', 'm', 'F', '2', '}' etc.
- Sequências de escape
Às vezes, é necessário usar caracteres que não podem ser digitados ou que tenham significado especial na programação C. Para usar esses caracteres, a sequência de escape é usada.
Por exemplo: `\n` é usado para nova linha. `\t` como tabulação horizontal. A barra invertida (`\`) faz com que se escape do modo normal, em que os caracteres são manipulados pelo compilador.
- String literal
Uma **string literal** é uma sequência de caracteres entre aspas duplas.### Exemplo:
```c"legal" // constante de string
"" // constante de cadeia nula
" " // constante de seis espaços em branco
"A" // constante de string com caractere único
"Resultado eh\n" // imprime string com nova linha
```- Enumerações
A palavra-chave `enum` é usada para definir tipos de enumeração.### Exemplos:
```c
enum cor {amarelo, verde, preto, branco};
```Aqui, a cor é uma variável e amarelo, verde, preto e branco são as constantes de enumeração com valor 0, 1, 2 e 3, respectivamente.Pode-se definir constantes simbólicas usando-se também a palavra **#define**.
## Tipos de dados e modificadores
São 5 os tipos de dados básicos em C:
char
Caractere
# Hello, World - C
```c
# includeint main(void){
printf("Hello, World!\n");
}
```## Compilação do código em C
**Entrada (Input)**:
```c
make main.c
./main
```**Saída (Input)**:
```cHello, World!
```# Linguagem C++
# Sistemas Digitais
As áreas de TI e Comunicação trazem, a todo o momento, modificações, inovações, adequações, enfim, apresentam-se de forma cada vez mais interessantes para o usuário e
desafiadoras para o profissional que as constrói. Assim, preparar equipes capazes de conceber, planejar e desenvolver soluções que funcionarão nas futuras gerações das áreas
de Tecnologia da Informação e Comunicação (TIC) apresenta-se como demanda urgente aos Cursos da área de TI e um desafio às práticas pedagógicas do professor para o ensino
da computação.Circuitos digitais são definidos como circuitos eletrônicos que empregam a utilização de sinais elétricos em apenas dois níveis de corrente (ou tensão) para definir a representação de valores binários. A importância do estudo dos circuitos lógicos como base para o estudo dos sistemas digitais é de grande relevância, uma vez que são a base dos circuitos encontrados nos computadores atuais e em uma enorme quantidade de dispositivos e instrumentos usados em todas as áreas.
# Programação de Microcontroladores
# Arduíno
# QT
O **QT** é um conjunto de ferramentas multiplataforma que combina uma estrutura de desenvolvimento de software e uma interface gráfica (GUI) altamente eficiente, amplamente utilizado para criar aplicativos com interfaces de usuário modernas e responsivas. Originalmente desenvolvido pela empresa norueguesa Trolltech, agora mantido pela empresa The Qt Company, o QT se destaca por sua flexibilidade, desempenho e pela facilidade de desenvolvimento de aplicações que podem ser executadas em diversos sistemas operacionais, como Windows, macOS, Linux, Android e iOS, sem necessidade de reescrita do código. Em resumo, o QT é uma solução robusta e versátil para o desenvolvimento de software, capacitando desenvolvedores a criar aplicativos potentes, esteticamente agradáveis e executáveis em várias plataformas com um único código-base. Ele continua a ser uma escolha popular em indústrias que exigem alta performance, flexibilidade e consistência entre dispositivos e sistemas operacionais.
Um dos principais atrativos do QT é sua abordagem orientada a objetos, que é implementada principalmente em C++. Ele fornece um conjunto abrangente de bibliotecas e APIs que simplificam o desenvolvimento de componentes gráficos, manipulação de eventos, acesso a banco de dados, redes e até mesmo processamento multithreading. Além disso, a integração de seu mecanismo de sinais e slots facilita a comunicação entre diferentes componentes do software, tornando o código mais modular e organizado.
Outro aspecto notável do QT é sua compatibilidade com linguagens de script, como Python, por meio do PyQt ou PySide, o que o torna acessível a desenvolvedores que preferem uma curva de aprendizado mais suave. Sua documentação rica e comunidade ativa também são grandes vantagens para iniciantes e veteranos que precisam de suporte ou recursos adicionais para seus projetos.
O QT também brilha no desenvolvimento de aplicações embarcadas, especialmente em dispositivos IoT, automação industrial e sistemas automotivos, devido ao seu desempenho leve e sua capacidade de criar interfaces gráficas de alta qualidade mesmo em hardware limitado. Suas ferramentas incluem o Qt Creator, um ambiente de desenvolvimento integrado (IDE) que simplifica o design visual de interfaces, a prototipagem e a depuração.
Embora seja amplamente elogiado, o QT também apresenta desafios. O licenciamento comercial pode ser caro, especialmente para pequenas empresas ou desenvolvedores individuais, embora exista uma versão de código aberto disponível sob a licença LGPL. A complexidade inicial para quem não está acostumado com C++ ou com frameworks avançados também pode ser um obstáculo.