Escolar Documentos
Profissional Documentos
Cultura Documentos
The CoderBR
Versão 2020
INTRODUÇÃO 4
OBJETIVO DO E-BOOK 5
PREPARANDO O AMBIENTE 6
FASES DE UM ALGORITMO 7
INCLUDES 8
OPERADORES ARITMÉTICOS 14
OPERADORES RELACIONAIS 17
ESTRUTURA CONDICIONAL 18
ESTRUTURA SE/SENÃO (IF/ELSE) 18
ESTRUTURA ESCOLHA (SWITCH/CASE) 21
OPERADOR LÓGICO 24
OPERADOR LÓGICO E (AND - &&) 25
OPERADOR LÓGICO OU ( OR – || ) 26
OPERADOR LÓGICO NÃO (NOT - !) 28
ESTRUTURA DE REPETIÇÃO 29
ESTRUTURA FOR (PARA) 30
ESTRUTURA WHILE (ENQUANTO) 31
ESTRUTURA DO..WHILE (FAÇA..ENQUANTO) 33
VETORES E MATRIZES 35
E AGORA? 39
Introdução
Hoje em dia, muitas pessoas tem o desejo de se tornar programadores. Porém, em
muitos casos, não sabem por onde começar e acabam desistindo. Em outros casos,
começam os estudos, mas desistem depois de algum tempo, por acharem difícil.
Tenho algumas respostas para você, leitor.
Aprender programação é difícil?
Sim, aprender programação não é uma tarefa fácil para todas as pessoas. É um caminho
duro, porém prazeroso. Não serei hipócrita ao falar que existe um caminho fácil, uma
dica mágica ou algo do tipo. Programação não é assim tão fácil. Porém, qualquer pessoa
pode aprender. Basta estudar bastante, se dedicar e exercitar.
Na programação, dividimos os níveis de conhecimento em: Júnior, Pleno e Sênior.
Algumas empresas, ainda possuem os níveis: Especialista, Evangelista e etc. Mas qual a
diferença entre eles? Apenas o tempo de experiência.
Então, se você está lendo esse livro, tenha certeza de que estaremos juntos. Em breve,
você vai se tornar um programador e estará apto para o mercado de trabalho.
Quando eu paro de estudar?
Se sua escolha foi se tornar programador(a), lamento dizer que você nunca irá parar de
estudar. É claro que com a experiência, o aprendizado se torna mais fácil. Isso diminui
bastante o tempo de aprendizado para uma nova linguagem, um novo framework ou
um novo projeto.
Mas Rodrigo, eu não sei se consigo entender essa sopa de letrinhas!
Sopa de letrinhas? Você deve estar falando dos nomes das linguagens e dos termos
utilizados em programação, certo? Existem linguagens como C, C#, PHP, Java, JavaScript,
Python, e por aí vai. As possibilidades de linguagens e ferramentas existentes não tem
fim. Mas fique tranquilo: você vai certamente seguir uma linha de estudo e se tornar
especialista em uma delas.
4
Objetivo do E-book
Este e-book destina-se à todas as pessoas que estão pensando em iniciar no mundo do
desenvolvimento de software, ou que ainda possuem dificuldade em lógica de
programação. O e-book cita exemplos simples, com o objetivo de aprimorar o
conhecimento básico em programação.
A linguagem utilizada durante o e-book é a C. Mas tentei utilizar o mínimo de recursos
possível desta linguagem. Novamente reafirmo que o objetivo principal, é estimular a
resolução de problemas, utilizando apenas o pensamento lógico para isso.
Se sentir falta de algumas coisas como ponteiros, funções como CIN, COUT, entre outras,
lembre-se: o objetivo é estimular a lógica e não ensinar uma linguagem de programação.
Ok?
Por fim, não se limite apenas aos exemplos contidos no livro. Estimule novos raciocínios,
procure mais exercícios sobre os temas abordados, junte um tema com o outro, enfim:
seja criativo neste momento, que colherá resultados no futuro.
Desfrute do e-book e boa leitura.
5
Preparando o Ambiente
Vamos montar todos os exemplos, em um ambiente Windows. Caso você esteja
utilizando algum outro sistema operacional, procure ferramentas de sua preferência,
para reproduzir os exemplos do livro.
A tecnologia escolhida para os exemplos, será a linguagem C. Vamos utilizá-la como base
nos exemplos, pois nos permite uma imparcialidade quanto a execução dos exercícios
do livro. Fique à vontade para praticar os exemplos em qualquer linguagem, se assim
preferir.
A IDE escolhida para o desenvolvimento, foi DEV-C++. Caso tenha alguma IDE de sua
preferência, pode utilizá-la também. Todos os exemplos e conceitos abordados, podem
e devem ser exercitados em qualquer outra linguagem ou IDE de preferência.
* “ DE (Ambiente de Desenvolvimento Integrado), é um software que auxilia no
desenvolvimento de aplicações, com o objetivo de facilitar diversos processos da
codificação de um projeto “.
Link para download do Dev-C++: https://sourceforge.net/projects/orwelldevcpp/ . Após
executar o download do executável, o processo de instalação consiste no famoso “Next,
Next e Finish”. Basta seguir os passos de instalação, que um ícone do programa ficará
disponível na sua máquina.
Caso a sua escolha não seja instalar nenhum programa, existem diversos sites na WEB,
que permitem a codificação e exibem o resultado do seu programa. Esta também é uma
opção, para acompanhar as práticas desse e-book.
6
Fases de um Algoritmo
Um algoritmo possui um fluxo muito bem definido, que podemos dividir em: Entrada,
Processamento e Saída. Dessa maneira, ao executar um algoritmo devemos receber
“várias entradas”. Essas entradas, serão a base para o seu processamento de
informação. Por fim, teremos uma resposta (saída), que será a devolução para o usuário.
É importante ressaltar, que qualquer tarefa que siga um padrão de execução, pode ser
considerado um algoritmo. Pense em tarefas como “Lavar o Carro”, “Tomar Banho”, “Ir
para a escola”. Mas para pensar nelas como algoritmos, é necessário seguir o fluxo
descrito acima: com a Entrada de Dados, o Processamento das informações e uma Saída
de Dados.
7
Entendendo um Pouco Sobre
Linguagem de Programação
Linguagem de programação, são conjuntos de instruções determinadas, que visam
executar uma tarefa ou ação específica. São um conjunto de regras de sintaxe e
semânticas, usadas para criar um programa.
Uma linguagem de programação, seja ela qual for, possui um conjunto de “palavras
reservadas”, que quando adicionados juntos formam o código-fonte de um software.
Este código-fonte, por sinal, é traduzido para código de máquina. Com isso, ele é
processado pelo computador, quando queremos “rodar” nosso programa.
Rodrigo, você falou que o ebook é baseado na linguagem de programação C. Mas por
que o C?
Não vou entrar na história da criação do C. Mas sim, no motivo da escolha do C, para as
práticas do e-book. Vamos lá! Primeiro, por ser uma linguagem imperativa, onde o
desenvolvedor deve informar o “passo-a-passo” do programa que está construindo.
Outro ponto, por ser uma linguagem procedural, o que basicamente significa que a
codificação deve ser baseada em funções. Por fim, o C é uma linguagem que possui
regras no seu desenvolvimento, básicas e comum a maior parte das linguagens de
programação.
É importante ressaltar, que a linguagem C deve ser compilada. Mas o que significa isso,
Rodrigo? “Ser compilada” significa que, após escrever o código-fonte, deve-se passar
esse código por um programa, o compilador, que vai ler e transformar seu código em
um código executável pelo seu computador.
Includes
No momento do desenvolvimento, nos testes durante o ebook, vamos utilizar a menor
quantidade de recursos disponível nas bibliotecas do C. Mas sempre que for necessário
adicionar alguma biblioteca da linguagem, utilizaremos o comando #include no início do
código.
Uma das bibliotecas que serão utilizadas em todos os programas, é a #include<stdio.h>
(STDIO – Standard I/O). Essa biblioteca, possui os comandos como “scanf” e “printf”.
Esses comandos são utilizados, para realizar os processamentos de entrada e saída de
informação, na tela do usuário.
8
Desenvolvendo um “Hello World”
Esse “termo” é muito comum no desenvolvimento de software, quando vamos aprender
uma nova linguagem. É como que, sem esse primeiro teste, você ainda não estivesse
preparado para seguir no aprendizado da linguagem, entende? Então, para afastar os
fantasmas do “Hello World”, faça os passos a seguir:
1. Abra a IDE de sua preferência (como falei, aqui vou utilizar o DEV-C++)
9
4. Execute o programa e veja o resultado (F11)
Nota importante: se você ainda não conhece o C e pulou este exemplo, pare a leitura
neste momento e faça o exercício proposto. Vamos juntos acabar com a “Maldição do
Hello World”.
10
O conceito de Constantes, segue a mesma ideia de variável. A diferença, é que uma
constante não tem o seu valor modificado. O valor atribuído a uma constante, deve se
manter até o final do programa. Por exemplo: o valor de PI (3,14) ou o valor de horas de
um dia (24 horas).
Para criar uma varável ou uma constante, é necessário definir um nome e um tipo de
dados. O nome, serve para o programa identificar no espaço de memória, qual o valor
que o programa deseja. Já o tipo de dado, serve para definir qual o tipo de valor que a
varável pode receber.
Por exemplo: ao definirmos uma variável idade, do tipo inteiro, informamos ao
programa que a variável conhecida como idade, deve receber apenas valores numéricos
do tipo inteiro, impossibilitando adicionamos valores como texto (“20 anos) ou números
reais (45,9).
Existem alguns tipos de dados, para definição das constantes e variáveis. São eles:
11
Na linguagem C, temos alguns tipos de dados disponíveis para uso. Na tabela abaixo,
exemplifico todos eles:
12
Idade = 2020 – 1980 (40)
Você: “[Nome], então você possui [Idade] anos.”
O exemplo acima pode ser um diálogo simples entre duas pessoas, mas mostra
exatamente como um programa funciona. Nele, existe uma entrada de dados (“Fulano”
e 1980). Depois, esses dados foram armazenados em uma variável (nome e
anonascimento). Em seguida, houve o processamento ( anoatual – anonascimento). Por
último, a saída de dados (“Fulano, então você possui 40 anos”).
Agora que entendemos como funciona um processo básico de um sistema, vamos
exemplificar esse processo na linguagem de programação C. Utilizamos comandos da
biblioteca para realizar essas operações, como printf, scanf.
#include<stdio.h>
int main(){
int anoatual = 2020;
int anonascimento, idade;
char nome[30];
13
Operadores Aritméticos
Operadores aritméticos são utilizados, para realizar operações nos elementos do
programa.
Operador Descrição
+ Operador de adição
- Operador de subtração
* Operador de multiplicação
/ Operador de divisão
% Operador de módulo (resto da divisão)
#include<stdio.h>
int main(){
nota1 = 7.8;
nota2 = 8.2;
14
INTRO: “Programa para receber o valor de um produto, a quantidade de itens e a
porcentagem do desconto e calcular o valor a ser pago pelo produto”
#include<stdio.h>
int main(){
float valorProduto, desconto, valorFinal;
int quantidade;
printf("------------------------------------------\n ");
printf("O Valor a ser pago e de R$ %.2f", valorFinal);
15
int valor1, valor2;
printf("------------------------------------------\n ");
printf("\nSoma %d", soma);
printf("\nSubtracao %d", soma);
printf("\nMultiplicacao %d", soma);
printf("\nResto %d", resto);
printf("\nDivisao %.1f", divisao);
16
Operadores Relacionais
Os operadores relacionais são utilizados, para realizar comparação entre valores e
retornar TRUE (caso a comparação seja verdadeira) ou FALSE (caso a comparação seja
falsa). Os operadores relacionais estão listados abaixo:
Operador Descrição
== Igual a
<> ou != Diferente de
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
Para exemplificar cada uma das utilizações dos operadores relacionais, vamos listar a
seguinte situação: imagina que sejam criadas 2 variáveis, v1 e v2. E que os valores dela
sejam 10 e 20, respectivamente.
V1 = 10
V2 = 20
Operação Resultado
V1 == V2 False (Falso)
V1 != V2 ou V1 <> V2 True (Verdadeiro)
V1 < v2 True (Verdadeiro)
V1 <= V2 True (Verdadeiro)
V1 > v2 False (Falso)
V1 >= v2 False (Falso)
17
Estrutura Condicional
A estrutura condicional é utilizada nos sistemas, sempre que existir uma condição com
mais de uma possibilidade de resposta. As condições, são umas das funções mais
utilizadas nos programas.
Por exemplo: imagina que um usuário só pode acessar o sistema, se a idade dele for
maior que 18 anos. Ou, em outro caso, que um aluno só deva receber a situação de
aprovado, se a média das notas dele for superior ou igual a 7. Para fazer as verificações
dessas condições, utilizamos uma estrutura condicional.
#include<stdio.h>
18
int main(){
int numero;
scanf("%d", &numero);
}else{
INTRO: “Criar um programa para ler duas notas, calcular a média entre elas e informar
se a média for maior ou igual a 7 o aluno está aprovado caso contrário o aluno está em
recuperação”
#include<stdio.h>
int main(){
float nota1, nota2, media;
19
media = ( nota1 + nota2 ) / 2;
A estrutura de condição IF/ELSE, pode ganhar mais fluxos com o comando ELSEIF. O
comando ELSEIF adiciona mais condições. O padrão do fluxo do programa segue o
mesmo informado anteriormente. Se a condição entrar no IF, ela não executa mais
nenhuma outra condição. Se a condição entrar em ELSEIF, ela executa o bloco em
questão e mais nenhum outro. Caso o programa não entre em nenhuma condição, ele
procura pelo ELSE e executa o seu bloco.
INTRO: “Crie um programa que leia 2 notas de um aluno, calcule a sua média e imprima
a situação do aluno da seguinte forma: se a média for maior ou igual a 7 o aluno está
aprovado. Caso a nota seja maior ou igual a 5 e menor que 7 o aluno está em
recuperação e caso sua média seja menor que 5 o aluno está reprovado”
#include<stdio.h>
int main(){
float nota1, nota2, media;
20
printf("Informe a nota2: ");
scanf("%f", ¬a2);
21
INTRO: “Crie um programa para ler uma opção de 1 até 4 e imprimir as repostas a seguir,
conforme a opção digitada. Caso a opção seja 1, imprimir “Ola, seja bem vindo ao
programa”. Case seja 2, imprimir a data atual. Caso seja 3,, imprimir a hora atual. Caso
seja 4, imprimir “fim do programa”. Se nenhuma das 4 opções for digitada, imprimir
“Opção inválida”.
#include<stdio.h>
#include <time.h>
main(){
int opcao;
char dateStr[9];
char timeStr[9];
_strdate( dateStr);
22
_strtime( timeStr);
scanf("%d", &opcao);
switch(opcao){
case 1 :
break;
case 2 :
break;
case 3 :
break;
case 4 :
printf("Fim do programa");
break;
23
Hora do exercício
1. Maria possui um armazém e possui um caderno com o código de todos os produtos
e seus preços. Mas por hora, esquece onde está o caderno. Seria interessante criar
um programa onde a Maria possa digitar o código do produto e o sistema informar
o nome e o preço do produto conforme tabela abaixo:
Operador Lógico
Em muitas situações, apenas uma condição dentro da estrutura de repetição, não
satisfaz a necessidade do problema. Neste momento, surgem os operadores lógicos.
Eles têm como finalidade, aumentar o número de possibilidades dentro de uma
condição.
Os operadores lógicos, são utilizados para combinar duas ou mais expressões e criar
uma lógica única de verdadeiro ou falsa. Imagina a seguinte situação: “Cris só vai sair no
final de semana para encontrar seus amigos, se ela conseguir juntar mais de R$ 50,00 e
não chover”. Como podemos observar na questão anterior, para Cris sair é necessário
que 2 operações aconteçam: ela tenha mais de R$ 50,00 e também não chova.
Operador Código
E (AND) &&
OU (OR) ||
NÃO (NOT) !
24
Operador Lógico E (AND - &&)
#include<stdio.h>
main(){
scanf("%f", ¬a1);
25
printf("Informe a nota2: ");
scanf("%f", ¬a2);
scanf("%d", &frequencia);
}else{
Operador Lógico OU ( OR – || )
O operador lógico OU (OR) retorna verdadeiro, se pelo menos UMA das condições forem
verdades. Veja abaixo a tabela verdade, para o operador lógico OU:
26
Para entender melhor, vamos imaginar as seguintes situações:
Mariana está querendo ir no cinema hoje. Mas para sair, ela precisa de uma carona até
o cinema OU que consiga o dinheiro do ônibus.
Vamos criar o seguinte programa: verificar se as condições de uma sala estão boas para
guardar uma vacina. As condições são: a temperatura não pode ser maior que 20C ou a
umidade do ar maior que 70%.
#include<stdio.h>
main(){
scanf("%d", &temperatura);
scanf("%d", &umidadeAr);
}else{
27
Operador Lógico NÃO (NOT - !)
O operador lógico NÃO (NOT), inverte o resultado de uma condição. Se o valor for
VERDADE, o operador NOT transforma em FALSO e vice-versa. Veja abaixo a tabela
verdade, para o operador lógico NÃO:
Resultado Saída
VERDADEIRA FALSA
FALSE VERDADEIRA
Exercícios
1. Rafael pensou em criar um programa, para receber uma idade e imprimir o número
de dias que representa essa idade.
Considere 1 ano com 365 dias.
2. Jonas vai viajar para outro país. Mas se deu conta, que todas as compras serão feitas
com outra moeda, que não o real. Isso deu um nó na cabeça de Jonas. Então, ele
pensou em criar um programa, para fazer a conversão de valores. Ele pensou em
digitar o valor e a taxa de conversão. Com isso, o programa imprime o resultado da
conversão.
3. Cris quer fazer um controle financeiro melhor. Para isso, pensou em desenvolver um
programa, no qual ela informe o salário líquido dela e o programa responda quanto
que ela pode gastar com cada item, conforme tabela abaixo:
28
4. Ana é professora de uma escola primária. Ela quer um programa, para ajudar a saber
se os seus alunos estão aprovados ou reprovados. Para isso, Ana precisa resolver a
seguinte situação:
O aluno faz 4 provas durante o ano. Devemos obter a média dessas provas. Se a
média for maior ou igual a 7, o aluno está aprovado. Porém, quando a nota não for
maior que 7, o aluno deve realizar mais uma prova (uma espécie de prova final) com
o peso 2. Então Ana realiza o seguinte cálculo:
Se a média final for maior que 7, o aluno recebe a situação aprovado com ressalvas.
Caso contrário, o aluno está reprovado.
Estrutura de Repetição
As estruturas de repetição (ou laços de repetição), são estruturas que permitem a
execução de um bloco de código por muitas vezes, até que uma condição não seja mais
verdadeira.
A estrutura de repetição é utilizada, para repetir uma função. Por exemplo, contar
dinheiro:
Enquanto tiver notas eu vou contando.
Ou, até mesmo, para uma brincadeira de adivinhação de número:
Vou pensar em um número. Enquanto você não adivinhar o número que eu pensei, fale
um número.
Percebe que nos dois exemplos, existe uma tarefa que vai ser repetir até que uma
condição não seja mais verdadeira?
29
Perceba que nos exemplos, temos ações que deverão ser repetidas durante algum
determinado tempo. Mas nós não sabemos bem ao certo a quantidade. Quando falamos
de estrutura de repetição na programação, temos principalmente o FOR (PARA), WHILE
(ENQUANTO) e DO..WHILE (FAÇA..ENQUANTO).
BLOCO DE EXECUÇÃO
A Inicialização, é a área que você deve adicionar os valores que as variáveis irão começar.
A condição, é a pergunta que o FOR vai fazer para executar cada iteração (cada loop). O
incremento, é o momento que FOR vai modificar as variáveis sempre no final de cada
iteração. Por exemplo, imagine o código abaixo:
#include<stdio.h>
main(){
30
}
WHILE ( CONDIÇÃO ) {
// BLOCO DE EXECUÇÃO
É importante ressaltar, que a estrutura while, tem apenas uma condição. Enquanto esta
condição for verdadeira, o bloco de execução será executado. Ao utilizar qualquer laço
de repetição, o programador deve se preocupar que exista de alguma forma, uma
operação que permita que a condição seja falsa e o programa saia da iteração.
Abaixo, vamos realizar o mesmo exemplo do FOR, utilizando o WHILE como comando
de iteração.
31
#include<stdio.h>
main(){
int i = 0;
while( i < 10 ) {
i++;
#include<stdio.h>
main(){
int i = 100;
while( i < 10 ) {
32
printf("While i e %d\n", i);
i++;
No código anterior, as inicializações são int j = 200 e int i = 100. As condições para os
laços são j < 10 (200 < 10) e i < 10 ( 100 < 10) respectivamente. Note que nos dois casos,
as condições são falsas, com isso, o bloco de execução não será executado nenhuma
vez.
DO {
// BLOCO DE EXECUÇÃO
} WHILE ( CONDIÇÃO );
Neste laço de repetição, é importante ressaltar que o bloco de execução será executado,
antes de verificar se a condição é verdadeira ou falsa. Se a condição for verdadeira, o
DO volta a ser executado. Se a condição for falsa, ele não executa novamente o DO. Com
isso, o bloco será executado sempre, ao menos uma vez, mesmo que a condição seja
falsa.
Como pode ver no código abaixo:
#include<stdio.h>
main(){
int i = 0;
do {
33
i++;
Como pode ver no código acima, o DO...WHILE possui uma estrutura muito parecida
com a estrutura do WHILE.
É importante ressaltar, que na grande maioria dos casos, o desenvolvedor pode escolher
a estrutura de repetição que ele tenha mais domínio para utilizar.
Exercícios
1. Crie um programa para ler um número inteiro e, utilizando um laço de repetição,
imprima a multiplicação deste número por todos os valores de 1 até 10.
3. Vamos criar um jogo? Crie um programa, onde o usuário informe um número. Após
o número informado, o programa pede para “outro jogador” informar um número
qualquer. Se o número informado for diferente do primeiro número, o programa
deve continuar perguntando.
34
Vetores e Matrizes
Um vetor é um espaço de memória, que permite armazenar muitos valores do mesmo
tipo ao mesmo tempo. O que separa cada um desses valores, é o seu índice.
Imagine uma sapateira com 5 prateleiras. Você pode guardar um sapato em cada uma
das prateleiras. No final, você vai ter na mesma sapateira, 5 pares de sapato. Mas o que
sapateira tem a ver com programação? Então, é exatamente assim que funciona um
vetor. Cada andar da sapateira, equivale a uma posição do vetor e cada sapato,
representa um valor para o vetor.
Agora, suponha que você precise armazenar 10 idades diferentes, em uma variável.
Você pode utilizar o vetor para isso.
Como na imagem anterior, temos os valores das 10 idades em cada elemento o vetor.
Pode-se observar, que a primeira idade possui valor 10 e está na posição 0 do vetor
idade. Já a última idade, possui o valor 50 e está na posição 9 do vetor idade.
É importante salientar, que ao criar um vetor com o tamanho X, os seus índices vão de
0 ate X-1. Ao tentar armazenar um valor maior que o tamanho do vetor, pode ocorrer
um erro.
No exemplo abaixo, vamos criar um vetor de 5 posições com diferentes valores.
Utilizaremos o for, para imprimir cada um dos valores.
#include<stdio.h>
main(){
35
int idades[5];
idades[0] = 10;
idades[1] = 32;
idades[2] = 28;
idades[3] = 21;
idades[4] = 15;
Ou, por exemplo, podemos criar um programa para ler os 5 números, armazenar no
vetor, e depois imprimir todos os números pares lidos.
#include<stdio.h>
main(){
int numeros[5];
scanf("%d", &numeros[i]);
36
}
int i = 0;
i++;
#include<stdio.h>
#include <string.h>
main(){
37
char nome[20] = "Rodrigo";
Exercícios
1. Desenvolva um programa, para armazenar 10 números em um vetor e depois
imprimir os valores de forma ordenada.
38
3. Faça um programa para ler 10 idades e armazenar em um vetor. Depois, pergunte
ao usuário, qual a ideia mínima para acesso ao evento. Com isso, o programa precisa
percorrer o vetor e informar quais idades podem entrar neste evento.
E agora?
Você chegou até aqui. Muito bem! Conseguiu resolver todos os exercícios? Criou mais
exemplos para resolver, além dos apresentados no e-book?
Se a resposta foi sim, você está pronto para avançar até a próxima fase da trilha. Não
sabe qual é? Lá no Instagram da TheCoderBR tem a trilha do iniciante completa. Dá uma
olhada lá!
Mas Rodrigo, eu queria exercitar um pouco mais, antes de avançar. Ótimo! Me chama
no Instagram e vamos conversar. Deixa eu saber um pouco mais sobre você. Se for o
caso, te mando mais exercícios para praticar.
Obrigado por ter solicitado o e-book da TheCoderBR. É com prazer, que procuro ajudar
a transformar a vida das pessoas. Espero que a transformação na sua vida tenha
começado agora.
O caminho para se tornar um programador de alto nível não é fácil. Mas me acompanha,
que estarei com você e juntos vamos atingir esse objetivo.
39