diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d88d337 --- /dev/null +++ b/.gitignore @@ -0,0 +1,263 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +################### +# compiled source # +################### +*.com +*.class +*.dll +*.exe +*.pdb +*.dll.config +*.cache +*.suo +# Include dlls if they’re in the NuGet packages directory +!/packages/*/lib/*.dll +# Include dlls if they're in the CommonReferences directory +!*CommonReferences/*.dll +#################### +# VS Upgrade stuff # +#################### +_UpgradeReport_Files/ +############### +# Directories # +############### +bin/ +obj/ +TestResults/ +################### +# Web publish log # +################### +*.Publish.xml +############# +# Resharper # +############# +/_ReSharper.* +*.ReSharper.* +############ +# Packages # +############ +# it’s better to unpack these files and commit the raw source +# git has its own built in compression methods +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +###################### +# Logs and databases # +###################### +*.log +*.sqlite +# OS generated files # +###################### +.DS_Store? +ehthumbs.db +Icon? +Thumbs.db + + +# User-specific files +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Visual Studo 2015 cache/options directory +.vs/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +bower_components/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt diff --git "a/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 6 - Introdu\303\247\303\243o \303\240 Estrutura de Dados.md" "b/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 6 - Introdu\303\247\303\243o \303\240 Estrutura de Dados.md" new file mode 100644 index 0000000..4a15fc0 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 6 - Introdu\303\247\303\243o \303\240 Estrutura de Dados.md" @@ -0,0 +1,31 @@ +# Estrutura de Dados + +Organiza os dados. +Diz como o dado será organizado +* Define: + * critérios + * conjunto de regras + * restrições, de como os dados têm que ser organizados que o dado precisa atender, para se encaixar para estar dentro daquela estrutura. + +## Estrutura Clássica + + * Lista + * Fila (FIFO) + * Pilha (LIFO) + * Árvore + +## Estruturas Básicas + +* Primitivas + * Número real + * Alfabeto + * Números inteiros + +* Personalizadas + * Estruturas de dados que podemos construir + + +## Estruturas Booleanas + +* Verdadeiro +* Falso \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 7 - O que \303\251 o dotNET.md" "b/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 7 - O que \303\251 o dotNET.md" new file mode 100644 index 0000000..206c5c7 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 7 - O que \303\251 o dotNET.md" @@ -0,0 +1,23 @@ +# O que é o .NET? + +> Framework desenvolvido pela Microsoft. + +## Definição + +### .NET + +* **Framework:** Estrutura utilizada para desenvolver uma aplicação. + * Conjunto de funcionalidades que é disponibilizado + * Multi-plataforma (Win - Mac - Linux) + * Mobile (Android - iOS) + +### C# + +* É uma das funcionalidades do .NET + * É a Linguagem + +## O .NET é separado em duas grandes partes + +### CLR (Commom Language Runtime) + +### LIB (Libraries) \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 8 - Commom Language Runtime.md" "b/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 8 - Commom Language Runtime.md" new file mode 100644 index 0000000..5b63853 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 1 - Introdu\303\247\303\243o/Aula 8 - Commom Language Runtime.md" @@ -0,0 +1,20 @@ +# Commom Language Runtime (CLR) + +> Virtual Machine + +## Motivação da sua criação + +* **ILCode** (Intermedian Language Code) + * é interpretado pelo **CLR** + +* **CLR** (Commom Language Runtime) + * é compilado em tempo de execução pelo **JIT** + +* **JIT** (Just-In-Time Compiled) + * compila o código para executar o programa no **SO** + +* **SO** (System Operational) + * Win + * Mac + * Linux + diff --git "a/Aulas/Se\303\247\303\243o 2 - Configura\303\247\303\243o do Ambiente/Aula 9 - Configura\303\247\303\243o do Ambiente.md" "b/Aulas/Se\303\247\303\243o 2 - Configura\303\247\303\243o do Ambiente/Aula 9 - Configura\303\247\303\243o do Ambiente.md" new file mode 100644 index 0000000..d42e2b3 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 2 - Configura\303\247\303\243o do Ambiente/Aula 9 - Configura\303\247\303\243o do Ambiente.md" @@ -0,0 +1,7 @@ +# Configuração do Ambiente + +## Instalação do Visual Studo Community 2017 + +> 15.9.35 + +[Instalação do Visual Studio Community 2017 - Windows](https://www.youtube.com/watch?v=lwmVwBE1AXI) \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 10 - Arquitetura de uma Solu\303\247\303\243o CSharp.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 10 - Arquitetura de uma Solu\303\247\303\243o CSharp.md" new file mode 100644 index 0000000..5e9e058 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 10 - Arquitetura de uma Solu\303\247\303\243o CSharp.md" @@ -0,0 +1,13 @@ +# Arquitetura de Solução .NET + +* Inicia-se definindo uma solução + * uma **SOLUÇÃO** (Aplicação) pode ter diversos + * **PROJETOS** (Assembly) que pode gerar arquivos + * **`.EXE`** + * **`.DLL` (Dynamic Link Library)** + * dentro de um *projeto* pode conter + * ~(PASTAS) - que chamamos de **NAMESPACE** + * dentro do *namespace* poderá conter + * ~(ARQUIVOS) - que são as **CLASS** + * dentro da *class* irá conter + * o código **C#** \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 11 - Criando um Projeto CSharp.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 11 - Criando um Projeto CSharp.md" new file mode 100644 index 0000000..a6c6482 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 11 - Criando um Projeto CSharp.md" @@ -0,0 +1,17 @@ +# Criando um Projeto C# + +## Novo Projeto + +Arquivo > Novo > Projeto... > Visual C# > .NET Core > Aplicativo do Console (.NET Core) Visual C# + +## Alteração do estilo de código + +Ferramentas > Opções... > Editor de Texto > C# > Estilo de Código > Formatação > Novas Linhas + +* **Desmarcar todas:** + * Novas opções de linha para chaves + * novas opções de linha para palavras-chaves + +* Atalho para formatar o código conforme a nova padronização escolhida: + * `CTRL` + `K` + `D` + diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 12 - Organiza\303\247\303\243o b\303\241sica do c\303\263digo.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 12 - Organiza\303\247\303\243o b\303\241sica do c\303\263digo.md" new file mode 100644 index 0000000..2f10c2d --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 12 - Organiza\303\247\303\243o b\303\241sica do c\303\263digo.md" @@ -0,0 +1,40 @@ +# Organização Básica do Código + +* Códigos em C# são organizados por sentenças de códigos + * Uma sentença de código é finalizada com **;** + * e pode estar em mais de uma linha + +* Pares de chaves **{ }** + * chaves de abertura e de fechamento + * denominam um bloco + * servem para agrupar um conjunto de sentenças + +* Ponto **.** (separador) + +* Aspas duplas **" "** - delimitadores de texto livre (Strings) + +```cs +using System; + +namespace CursoCSharp +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + + { + Console.WriteLine("Hello World!"); + } + } + } +} +``` + +## Executando o código criado + +* Clicando no botão **Play** da IDE (modo Debug) + * Tecla **`F5`** (modo Debug) + +* **`CTRL`** + **`F5`** - Mantém o terminal aberto apresentando a saída do código, até que seja precionada uma tecla para fechá-lo. diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 13 - Primeiro Programa.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 13 - Primeiro Programa.md" new file mode 100644 index 0000000..64d4d20 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 13 - Primeiro Programa.md" @@ -0,0 +1,73 @@ +# Primeiro Programa + +## Criando uma nova pasta no Projeto + +* Na tela de **Gerenciador de Soluções** + * botão direito no projeto *CursoCSharp* + * Adicionar > Nova Pasta + * Nomear a pasta como *"Fundamentos"* + +## Criando um novo arquivo na pasta Fundamentos + +* Na tela de **Gerenciador de Soluções** + * botão direito na pasta *Fundamentos* + * Adicionar > Classe... + * no campo **Nome** + * Nomear como *PrimeiroPrograma.cs* + * clicar no botão [Adicionar] + * > ***Obs.:*** *não é necessário incluir o ".cs" pois o próprio VS inclui a extensão ".cs".* + +### Conceito: + +#### **using** - [7:13] + +* `System.Console.Write("Primeiro ");` + * a palavra reservada *System*, está em cinza porque não há a necessidade de usá-lo, uma vez que o *System* foi declarado no **`using System;`** + * o que simplifica a utilização dos métodos da *classe System* +durante o desenvolvimento do código. + * se não utilizássemos o `using`, deveriamos escrever a nossa +sentença da seguinte forma: +>```cs +> System.Console.Write("Primeiro "); +> System.Console.WriteLine("Programa"); +> System.Console.WriteLine("Terminou!"); +>``` + * Para adequarmos a nossa sentença devemos retirar a palavra +reservada *System* da sentença, mantendo-a apenas na declaração do `using`. + * `Console.Write("Primeiro ");` + +### [!Tips] +* **`CTRL` + `.`**, exibe a resolução propósta pela IDE para +correção de erros na sintáxe do código e deixá-lo mais simples e elegante. + +* **`cw`** - ao digitarmos e teclarmos `TAB` 2x, a IDE irá escrever o código `Console.WriteLine();` + +#### **Console.Write** - [5:40] + +* Significa que o texto será escrito na linha do *console* e o prompt permanecerá na mesma linha + * > Escreve e permanece na mesma linha + +#### **Console.WriteLine** - [5:59] + +* Significa que o texto será escrito na linha do *console* e o prompt irá para uma nova linha. + * > Escreve e quebra a linha + +### Método Main() - [12:04] + +O ponto de entrada de um programa é definido do método **`Main()`** + +### Erro - CS0017 + +> *Programa tem mais de um ponto de entrada definido. Compilar com /main para especificar o tipo que contém o ponto de entrada.* + +### Possíveis resoluções: + +* Resolução 1: Renomeando o método **`Main()`** em cada arquivo de classe. + * Ex.: **`Main2()`**, no arquivo de classe *PrimeiroPrograma.cs*. + +* Resolução 2: Alterando as propriedades do projeto + * botão direito no projeto *CursoCSharp* + * Opção "Propriedades" > Aplicativo + * No campo *Objeto de inicialização:* + * podemos definir qual ponto de entrada será lido prioritariamente pelo VS. + * Mas para objetivo de aula iremos manter a opção *(Não definido)*, como padrão. diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 14 - Link para material.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 14 - Link para material.md" new file mode 100644 index 0000000..2673dd9 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 14 - Link para material.md" @@ -0,0 +1,5 @@ +# Aula 14 - Link para material + +* **Link para acessar o material que será utilizado na próxima aula:** + +[Central de exercícios](D:\repoCode\cod3r\util\central.zip) diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 15 - Problema - Multiplos Main.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 15 - Problema - Multiplos Main.md" new file mode 100644 index 0000000..6b30f04 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 15 - Problema - Multiplos Main.md" @@ -0,0 +1,36 @@ +# Aula 15 - Problema - Multiplos Main + +### Erro - CS0017 + +> *Programa tem mais de um ponto de entrada definido. Compilar com /main para especificar o tipo que contém o ponto de entrada.* + +### Possibilidades para resolver: + +* Resolução 1: Renomeando o método **`Main()`** em cada arquivo de classe. + * Ex.: **`Main2()`**, no arquivo de classe *PrimeiroPrograma.cs*. + +* Resolução 2: Alterando as propriedades do projeto + * botão direito no projeto *CursoCSharp* + * Opção "Propriedades" > Aplicativo + * No campo *Objeto de inicialização:* + * podemos definir qual ponto de entrada será lido prioritariamente pelo VS. + * Mas para objetivo de aula iremos manter a opção *(Não definido)*, como padrão. + +#### Resolução 3 + +* Nossas classes serão criadas com um padrão para cada aula. + +>```cs +> public static void Executar() {} +>``` + + * e iremos acrescentar ao nosso arquivo **Program.cs**, +dentro do método **`Main()`** uma nova linha referenciando essa classe. +Ex.: +>```cs +> {"Primeiro Programa - Fundamentos", PrimeiroPrograma.Executar}, +>``` + + * Descrição: *"Primeiro Programa - Fundamentos"* - para identificarmos o programa que será lido + * Classe: *`PrimeiroPrograma`* - chamada da classe + * Método: *`Executar`* - o método dentro dessa classe que será executado. \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 16 - Coment\303\241rios de C\303\263digo.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 16 - Coment\303\241rios de C\303\263digo.md" new file mode 100644 index 0000000..2d432f8 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 16 - Coment\303\241rios de C\303\263digo.md" @@ -0,0 +1,70 @@ +# Aula 16 - Comentários de Código + +## Iniciando a Rotina de aula + +* Criar um arquivo dentro do nosso projeto + * Botão direito na pasta *Fundamentos* + * Adicionar > Novo item... + * Itens do Visual C# > Classe + * No campo *Nome:* - nomeie o arquivo + * Ex.: *Comentarios.cs* + * Botão Adicionar para concluir o processo. + +* Criar um método `Executar()` + * dentro da `class Comentarios {}` + + >```cs + > public static void Executar() {} + >``` + +* Add a referência do exercício dentro de *Program.cs* + * dentro do método **`Main()`** + + > ```cs + > {"Comentários - Fundamentos", Comentarios.Executar}, + >``` + +## Comentários de Código - (2:59) + +* **`//`** - Comentário de linha + * Utilizamos para comentar uma linha de código específica + * Para adicionar algum comentário simples sobre o trecho de código a seguir + +* **`///`** - XML Comments + * o C# tem o comentário que cria tags XML + * como por exemplo: `` + * onde podemos criar um sumário do código desenvolvido + * especificando, por exemplo, o que o método faz + * especificação sobre um parâmetro se colocarmos o +*XML Comments* diretamente acima da método com parametros + * o C# irá criar as tags `` + * e tudo isso serve também para gerar documentação fora do código + * que poderá se consumida em um formato mais amigável + * Ex.: tag `` + * que faz uma referência para outra parte da documentação + +* **`/* */`** - Comentários de Múltipas linhas + * Utilizamos para adicionar comentários que ocupará mais de uma linha + * também utilizado para comentar blocos de códigos + +## Boas práticas + +* Faz com que tenhamos pouca necessidade de comentários no meio do código + * Código claro + * Bons nomes + * fácil leitura + +* Num contexto de CURSO é importante que todo o código seja comentado + +* Em um contexto REAL, não faz sentido o uso de um comentário óbivio + +#### Teclas de atalho + +* **`CRTL`+ `C`** - para comentar uma linha ou um trecho de código selecionado + +* **`CTRL` + `U`** - para descomentar uma linha ou um trecho de código selecionado + +#### Menu +* Editar > Avançado + * Definir Seleção Como Comentário + * Remover definição de seleção como comentário \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 17 - Vari\303\241veis e Constantes.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 17 - Vari\303\241veis e Constantes.md" new file mode 100644 index 0000000..ccb0b70 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 17 - Vari\303\241veis e Constantes.md" @@ -0,0 +1,98 @@ +# Aula 17 - Variáveis e Constantes + +### Atalho + +* **`CTRL` + `D`** - Duplicar linha + +* Rotina de criação do arquivo da aula + * Na pasta Fundamentos + * `VariaveisEConstantes.cs` + * No método **`Main()`** do **Program.cs** + * `{"Variáveis e Constantes - Fundamentos",VariaveisEConstantes.Executar},` + +* C# é uma linguagem fortemente tipada + +## Variáveis + +Pode ser alterada durante a execução do algoritmo do programa + +### Exemplo de Declaração: + +* `double raio = 4.5;` + * **`double`**: Tipo da variável (números de ponto flutuante) + * **`raio`**: Nome da variável (identificador) + * **`=`**: sinal de atribuição à variável + * **`4.5`**: Valor atribuido à variável + * **`;`**: para finalizar a sentença + +## Constantes + +Não permite que esse identificador seja alterado +durante todo o algoritmo do programa + +* `const double PI = 3.14;` + * **`const`**: Define que o identificador será uma constante + * **`double`**: Tipo da variável (números de ponto flutuante) + * **`PI`**: Nome da variável (identificador) + * **`=`**: sinal de atribuição à variável + * **`3.14`**: Valor atribuido à variável + * **`;`**: para finalizar a sentença + +## Tipos Internos + +### Tipo Booleano + +* **bool** -> `true` e `false` + +### Tipos Inteiros + +* **byte** -> constituído por 8 Bits (0 a 255) +* **sbyte** -> tipo byte que aceita sinal, aceita um range entre positivos e negativos (-127 a 128) + * `MinValue` -> método que exibe o valor mínimo + * neste caso o menor valor de **sbyte** + +* **short** -> constituído por 2 bytes (maior valor: 32767) + +* **int** -> constituído por 4 bytes (menor valor: -2147483648) + * Mais usado dos inteiros! +* **uint (unsigned Int)** -> constituído por 4 bytes sem sinal (menor valor: 0 - maior: 4.294.967.295) + * `populacaoBrasileira = 207_600_000;` + * podemos usar o "_" como separador universal + * isso permite clareza na leitura do número no código + +* **long** -> 8 bytes, range entre positivos e negativos +* **ulong (unsigned long)** -> apenas positivos + * `populacaoMundial = 7_600_000_000;` + * podemos usar o "_" como separador universal + * isso permite clareza na leitura do número no código + +### Tipos Reais + +* **float** -> 4 bytes + * deve ter a letra *f* após o número com ponto flutuante + * sem essa notação o C# irá entender que o número é um **double** (que é dobro do float) + +* **double** -> 8 bytes + * Mais usado dos reais! + * utilizar preferencialmente + +* **decimal** + * muito utilizado para números astronômicos + * valor máximo: 79228162514264337593543950335 + +### Tipos Caracteres + +* **char** -> 1 caractere + * delimitado por aspas simples + * Ex.: `char letra = 'b';` + * se colocarmos mais de uma letra dentro das aspas simples o C# acusará erro + +* **string** -> cadeia de caracteres + * delimitado por aspas duplas + * Ex.: `string texto = "Seja bem vindo ao Curso de C#!";` + +## Notação + +* **Camel Case** é a prática de escrever palavras compostas ou frases de modo que cada palavra ou abreviatura no meio da frase comece com uma letra maiúscula. + +* **Pascal Case** é a prática de escrever palavras compostas ou frases de modo que cada palavra ou abreviatura comece com uma letra maiúscula. diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 18 - Infer\303\252ncia de Tipos.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 18 - Infer\303\252ncia de Tipos.md" new file mode 100644 index 0000000..0bed9df --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 18 - Infer\303\252ncia de Tipos.md" @@ -0,0 +1,24 @@ +# Aula 18 - Inferência de Tipos + +* `Inferencia.cs` +* `{"Inferências - Fundamentos", Inferencia.Executar},` + +* A **inferência** dentro do C# é tratada internamente pela linguagem +* Ex.: `var nome = "Hamilton";` +* **`var`**: mesmo não sendo um padrão de tipagem forte, o C# acata + * internamente o C# olha para o valor `"Hamilton"` + * por estar entre aspas duplas, ele infere que o valor é um tipo **string** + * se tentarmos colocar um valor do tipo inteiro posteriormente + * o C# reclamará erro de conversão do tipo int para string + * entendendo que uma variável do tipo **string** + * não pode receber um valor inteiro + +* outra deficiência da **inferência** + * quando se cria uma variável com tipo **`var`** + * para que o próprio compilador descubra o seu tipo + * essa variável não pode ser criada sem um valor definido + * se ocorrer de fazermos a atribuição em outra linha o C# reclamará o seguinte erro: + * > `var idade;` - **declaração** + * > `idade = 41;` - **atribuição** + * *Variáveis de tipo implícito devem ser inicializadas* + * > `var idade = 41;` - **declaração e inicialização** \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 19 - Interpola\303\247\303\243o de Strings.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 19 - Interpola\303\247\303\243o de Strings.md" new file mode 100644 index 0000000..1c092b2 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 19 - Interpola\303\247\303\243o de Strings.md" @@ -0,0 +1,31 @@ +# Aula 19 - Interpolação de Strings + +* Interpolacao.cs +* `{"Interpolação de Strings - Fundamentos", Interpolacao.Executar},` + +* Até aqui estavamos utilizando como padrão, + * a **concatenação** para exibição do texto no console. + * Ex.: + + >```cs + > Console.WriteLine("O " + nome + " da marca " + marca + " custa R$" + preco + "."); + >``` + +## Utilizando a interpolação + +### Primeira forma: + +* Numerando as interpolações com índices + +```cs + Console.WriteLine("O {0} da marca {1} custa R${2}.", nome, marca, preco); +``` + +### Segunda forma: + +* Informando os nomes das próprias variáveis +* para isso, add **`$`** (modificador) no início da string. + +```cs + Console.WriteLine($"A marca {marca} é legal!"); +``` \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 20 - Nota\303\247\303\243o Ponto.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 20 - Nota\303\247\303\243o Ponto.md" new file mode 100644 index 0000000..7885e51 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 20 - Nota\303\247\303\243o Ponto.md" @@ -0,0 +1,38 @@ +# Aula 20 - Notação Ponto + +* NotacaoPonto.cs +* {"Notação Ponto - Fundamentos", NotacaoPonto.Executar}, + +* Utilizamos a **Notação Ponto** para acessar os membros de classe. + * nos dá acesso a muitas funcionalidades + * sempre associado ao que está antes da **Notação Ponto**. Ex.: + * Se for um **texto**, então funcionalidades referente a texto + * Se for **número**, então funcionalidades referente a número + * Se for algo que esteja **vázio**, podemos usar uma **`?`** + >```cs + > string valorImportante = null; + > Console.WriteLine(valorImportante?.Length); + >``` + + * Isso faz com que esse valor só seja acessado + * se de fato a variável **`valorImportante`** + * esteja definida + * se estiver vazia ela não será acessada e retonará um valor vazio + * é o que chamamos de ***Navegação Segura*** entre as chamadas- (evitar erro) + * ***Object reference not set to an instance of an object.*** + +```cs +var saudacao = "olá".ToUpper().Insert(3, " World!").Replace("World!", "Mundo!"); +``` + +* A variável `saudacao` irá receber + * uma string "olá" + * com a **Notação Ponto** serão chamadas + * a funcionalidade **`ToUpper()`**, que transformará esse texto em maiúsculas "OLÁ" + * a funcionalidade **`Insert()`**, que adicionará na posição 3, o texto " World!" + * a funcionalidade **`Replace()`**, que substituirá + * o texto "World!" + * pelo texto "Mundo!" + +* Podemos encadear várias chamadas em uma única sentença de código. + diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 21 - Lendo Dados do Console.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 21 - Lendo Dados do Console.md" new file mode 100644 index 0000000..015c364 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 21 - Lendo Dados do Console.md" @@ -0,0 +1,43 @@ +# Aula 21 - Lendo Dados do Console + +* LendoDados.cs +* {"Lendo Dados do Console - Fundamentos", LendoDados.Executar}, + +## Recuperando informação do Console + +* **`Console.ReadLine()`** + * Sentença de código responsável por ler uma linha digitada no console + * Utilizamos para pegar a entrada de dado pelo próprio console + * e armazenar de forma dinâmica na variável + * Por padrão todo dado capturado pelo **`ReadLine`** é uma string + +### Conversões + +* Quando as informações capturadas forem dados do tipo numérico: + * precisaremos converter conforme necessidade + * Para isso utilizaremos o **`Parse()`**, Ex.: + * conversão para um tipo inteiro + + >```cs + > int idade = int.Parse(Console.ReadLine()); + >``` + + * conversão para um tipo double + + >```cs + > double salario = double.Parse(Console.ReadLine(), CultureInfo.InvariantCulture); + >``` + +### System.Globalization + +* Em relação ao *salário*, no terminal o separador de casas decimais deverá ser digitado com: + * *vírgula*, se a configuração do Sistema Operacional estiver em pt-BR. + + * *ponto*, se a configuração do Sistema Operacional estiver no padrão americano. + +> Porém é possível padronizarmos o *ponto* como separador de casas decimais, independente da configuração do S.O. + +Pra isso utilizaremos do **`System.Globalization;`** o + * **`CultureInfo.InvariantCulture`** + * Ou seja, utilizará a *cultura Invariante* + * não olhando para o símbolos culturais configurados no S.O. \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 22 - Formatando N\303\272meros.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 22 - Formatando N\303\272meros.md" new file mode 100644 index 0000000..cc3b0d7 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 22 - Formatando N\303\272meros.md" @@ -0,0 +1,44 @@ +# Aula 22 - Formatando Números + +* FormatandoNumero.cs +* {"Formatando Número - Fundamentos", FormatandoNumero.Executar}, + +## Símbolos de Formatação + +>```cs +> double valor = 15.175; +> Console.WriteLine(valor.ToString("F1")); +>``` + +* **`ToString("F1")`** + * Transformamos o valor numérico para uma string + * Dentro dele informamos qual o tipo de critério/formatação ele deve usar + + * **`"F1"`(float)** - Formata o número decimal com apenas **uma casa decimal** + * as casas decimais serão arredondadas para exibir apenas um valor após a vírgula + + * **`"C"` (currency)** - Formata o **`valor`** e exibe como um valor monetário + + * **`"P"` (Percent)** - Multiplica o **`valor`** por 100 e Formata a exibição em percentual + + * **`"#.##"`** - Formatação como máscara para ser exibido + * as casas decimais também sofrerão arredondamento + + * para este exemplo podemos padronizar a *cultura* de exibição + * independente da configuração do SO, pra isso: + > `using System.Globalization;` + +>```cs +> CultureInfo culturaBr = new CultureInfo("pt-BR"); +> Console.WriteLine(valor.ToString("C0", culturaBr)); +>``` + +* 1º parâmetro: **`"C0"`** - Currency sem casas decimais +* 2º parâmetro: **`cultura`** - exibir conforme a cultura parametrizada + +>```cs +> int inteiro = 256; +> Console.WriteLine(inteiro.ToString("D10")); +>``` + +* **`"D10"`** - Formata para *decimal* com 10 posições, completando com **zeros a esquerda** diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 23 - Convers\303\265es.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 23 - Convers\303\265es.md" new file mode 100644 index 0000000..1d4c1d1 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 23 - Convers\303\265es.md" @@ -0,0 +1,89 @@ +# Aula 23 - Conversões + +* Conversoes.cs +* {"Conversões - Fundamentos", Conversoes.Executar}, + +## Regras de conversão + +* Sempre que na conversão houver possibilidade de perda de informação: + * Devemos **explicitar** que queremos converter um tipo de número em outro + +### Situações que podem haver perda de informação + +1. Transformar um **número real** com casas decimais para um **inteiro** + +2. **double** para **float** - onde o primeiro tem uma quantidade de armazenamento superior em relação ao segundo + +> **O compilador não olha para o valor contido na variável e sim para o seu tipo, no momento da conversão. +> A menos que façamos a conversão de forma explícita, o compilador irá barrar a conversão.** + +## Conversão Implícita + +>```cs +> int inteiro = 10; +> double quebrado = inteiro; +>``` + +* Neste exemplo houve uma conversão, porém, devido a capacidade de +armazenamento do tipo **double** ser maior que a do tipo **inteiro** +o compilador não irá reclamar. + +## Convesão Explícita + +### *Cast* + +>```cs +> double nota = 9.7; +> int notaTruncada = (int) nota; +>``` + +> Obs.: Neste tipo de conversão o valor será truncado, ou seja, o decimal será **arrancado** fora. + +* ***Caso a conversão não seja explicitada,*** + + >```cs + > double nota = 9.7; + > int notaTruncada = nota; + >``` + +* ***resultará no seguinte Erro:*** + > *Não é possível converter implicitamente tipo "double" em "int". + > Existe uma conversão explícita (há uma conversão ausente?)* + +### *Parse()* + +>```cs +> string idadeString = Console.ReadLine(); +> int idadeInteiro = int.Parse(idadeString); +>``` + +* ***Observação.:*** + > *Essa forma poderá gerar um erro para o programa, caso o que for digitado, não seja um número inteiro.* + +### *Convert* + +>```cs +> idadeInteiro = Convert.ToInt32(idadeString); +> Console.WriteLine("Resultado {0}", idadeInteiro); +>``` + +### *TryParse()* + +* _Forma segura de realizar a conversão de **string** para **int**_ + > *Mesmo que se digite um valor que não é inteiro, será convertido para zero, __como padrão__, não gerando assim, erro no programa.* + +>```cs +> Console.Write("Digite o primeiro número: "); +> string palavra = Console.ReadLine(); +> int numero1; +> int.TryParse(palavra, out numero1); +> Console.WriteLine("Resultado 1: {0}", numero1); +>``` + +* Exemplo refatorado + +>```cs +> Console.Write("Digite o segundo número: "); +> int.TryParse(Console.ReadLine(), out int numero2); +> Console.WriteLine("Resultado 2: {0}", numero2); +>``` \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 24 - Operadores Aritm\303\251ticos.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 24 - Operadores Aritm\303\251ticos.md" new file mode 100644 index 0000000..4ae8d4a --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 24 - Operadores Aritm\303\251ticos.md" @@ -0,0 +1,41 @@ +# Aula 24 - Operadores Aritméticos + +* OperadoresAritmeticos.cs +* {"Operadores Aritméticos - Fundamentos", OperadoresAritmeticos.Executar}, + +## Soma, Subtração e Multiplicação + +```cs +// Preço Desconto +var preco = 1000.0; +var imposto = 355; +var desconto = 0.1; + +double total = preco + imposto; +var totalComDesconto = total - (total * desconto); +Console.WriteLine("O preço final é {0}", totalComDesconto); +``` + +## Divisão e Potência + +```cs +// IMC +double peso = 93.2; +double altura = 1.88; +double imc = peso / Math.Pow(altura, 2); +Console.WriteLine($"IMC é {imc}."); +``` + +* **`Math.Pow()`** + * 1o. argumento, refere-se a ***base*** + * 2o. argumento, refere-se ao ***expoente*** + +## Operador Módulo + +```cs +// Número Par/Impar +int par = 24; +int impar = 55; +Console.WriteLine("{0}/2 tem resto {1}", par, par % 2); +Console.WriteLine("{0}/2 tem resto {1}", impar, impar % 2); +``` diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 25 - Operadores Relacionais.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 25 - Operadores Relacionais.md" new file mode 100644 index 0000000..d1b19b3 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 25 - Operadores Relacionais.md" @@ -0,0 +1,29 @@ +# Aula 25 - Operadores Relacionais + +* O resultado de um operador relacional sempre será **verdadeiro** ou **falso** +* Ou seja, o resultado é ***Boleano (bool)*** + +* OperadoresRelacionais.cs +* {"Operadores Relacionais - Fundamentos", OperadoresRelacionais.Executar}, + +## Notações + +* **`>`** - Maior que +* **`<`** - Menor que +* **`==`** - Igualdade +* **`!=`** - Diferente +* **`>=`** - Maior ou igual a +* **`<=`** - Menor ou igual a + +```cs +double nota = 6.0; +double notaDeCorte = 7.0; + +Console.WriteLine("Nota inválida? {0}", nota > 10.0); +Console.WriteLine("Nota inválida? {0}", nota < 0.0); +Console.WriteLine("Perfeito? {0}", nota == 10.0); +Console.WriteLine("Tem como melhorar? {0}", nota != 10.0); +Console.WriteLine("Passou por média? {0}", nota >= notaDeCorte); +Console.WriteLine("Recuperação? {0}", nota < notaDeCorte); +Console.WriteLine("Reprovado? {0}", nota <= 3.0); +``` \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 26 - Operadores L\303\263gicos_part_1.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 26 - Operadores L\303\263gicos_part_1.md" new file mode 100644 index 0000000..3702eab --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 26 - Operadores L\303\263gicos_part_1.md" @@ -0,0 +1,38 @@ +# Aula 26 - Operadores Lógicos #01 + +## Conceito + +### Tabela Verdade + +| Cenário TV50 | +|:------------:| +| (***AND***) | + +Ter || Qui || Sáb +:--:|:--:|:--:|:--:|:--: +| V | **&&** | V | = | V | +| V | **&&** | F | = | F | +| F | **&&** | V | = | F | +| F | **&&** | F | = | F | + +| Cenário Sorvete | +|:---------------:| +| (***OR***) | + +Ter || Qui || Sáb +:--:|:--:|:--:|:--:|:--: +| V | **\|\|** | V | = | V | +| V | **\|\|** | F | = | V | +| F | **\|\|** | V | = | V | +| F | **\|\|** | F | = | F | + +| Cenário TV32 | +|:-------------:| +| (***XOR***) | + +Ter || Qui || Sáb +:--:|:--:|:--:|:--:|:--: +| V | **^** | V | = | F | +| V | **^** | F | = | V | +| F | **^** | V | = | V | +| F | **^** | F | = | F | diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 27 - Operadores L\303\263gicos_part_2.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 27 - Operadores L\303\263gicos_part_2.md" new file mode 100644 index 0000000..d4b6456 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 27 - Operadores L\303\263gicos_part_2.md" @@ -0,0 +1,24 @@ +# Aula 27 - Operadores Lógicos #02 + +* OperadoresLogicos.cs +* {"Operadores Lógicos - Fundamentos", OperadoresLogicos.Executar}, + +### Operadores Binários + +* Opera encima de dois operandos + +* **&&** - Operador lógico **E** +* **`executouTrabalho1 && executouTrabalho2`** + +* **||** - Operador lógico **OU** +* **`executouTrabalho1 || executouTrabalho2`** + +* **^** - Operador lógico **OU Exclusivo** +* **`executouTrabalho1 ^ executouTrabalho2`** + +### Operadores Unários + +* Trabalha com apenas um operador +* **`!comprouSorvete`** + * O símbolo de exclamação vai representar uma **Negação lógica** + * invertendo o valor de um determinado operando \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 28 - Operadores de Atribui\303\247\303\243o.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 28 - Operadores de Atribui\303\247\303\243o.md" new file mode 100644 index 0000000..85d5a05 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 28 - Operadores de Atribui\303\247\303\243o.md" @@ -0,0 +1,83 @@ +# Aula 28 - Operadores de Atribuição + +* OperadoresAtribuicao.cs +* {"Operadores Atribuição - Fundamentos", OperadoresAtribuicao.Executar}, + +## Operador binário de Atribuição + +* **Atribuição substitutiva** - substitui-se o valor existente na variável + + >```cs + > var num1 = 3; + > num1 = 7; + >``` + +* **Atribuição aditiva** - acrescenta-se um valor ao valor existente na variável + + >```cs + > var num1 = 3; + > num1 += 10; // num1 = num1 + 10; + >``` + +* **Atribuição subtrativa** - subtrai-se um valor do valor existente na variável + + >```cs + > var num1 = 3; + > num1 += 10; // num1 = num1 + 10; + > num1 -= 3; // num1 = num1 - 3; + >``` + +* **Atribuição Multiplicativa** - multiplica-se um valor ao valor existente na variável + + >```cs + > var num1 = 3; + > num1 += 10; // num1 = num1 + 10; + > num1 -= 3; // num1 = num1 - 3; + > num1 *= 5; // num1 = num1 * 5; + >``` + +* **Atribuição divisiva** - divide-se um valor ao valor existente na variável + + >```cs + > var num1 = 3; + > num1 += 10; // num1 = num1 + 10; + > num1 -= 3; // num1 = num1 - 3; + > num1 *= 5; // num1 = num1 * 5; + > num1 /= 2; // num1 = num1 / 2; + >``` + +* **Atribuição por valor (cópia)** - atribui-se o valor de uma variável à outra variável + + >```cs + > int a = 1; // atribuição a partir de um literal + > int b = a; // atribuição a partir de uma variável + >``` + +## Operador unário de Atribuição + +### Ocorre uma atribuição implícita + +* **Atribuição com operador unário de incremento** - acrescenta-se uma unidade da variável em si próprio + + >```cs + > a++; // a = a + 1; + >``` + +* **Atribuição com operador unário de decremento** - subtrai-se uma unidade da variável em si próprio + + >```cs + > b--; // b = b - 1; + >``` + +* **Atribuição por referência** - atribui-se um valor a um local de memória referenciado na variável + + >```cs + > dynamic c = new System.Dynamic.ExpandoObject(); + > c.nome = "João"; + > + > dynamic d = c; + > d.nome = "Maria"; + > + > Console.WriteLine(c.nome); + >``` + \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 29 - Operadores Un\303\241rios.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 29 - Operadores Un\303\241rios.md" new file mode 100644 index 0000000..aa08aac --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 29 - Operadores Un\303\241rios.md" @@ -0,0 +1,54 @@ +# Aula 29 - Operadores Unários + +* OperadoresUnarios.cs +* {"Operadores Unários - Fundamentos", OperadoresUnarios.Executar}, + +* **`-`:** Símbolo de **menos** + * associado a um operando, ***inverte o sinal*** do valor aritmético contido na variável + + >```cs + > var valorNegativo = -5; + > Console.WriteLine(-valorNegativo); // output: 5 + >``` + +* **`!`:** Símbolo de **exclamação** + * associado a um operando, faz uma ***negação lógica*** do resultado lógico da variável + + >```cs + > var booleano = true; + > Console.WriteLine(!booleano); + >``` + +* **Incremento** + * acrescenta-se uma unidade da variável em si próprio + * utilizando sintaxe com operador **Pós-fixado** + * colocando o símbolo de incremento *depois do operando* + + >```cs + > var numero1 = 2; + > numero1++; + > Console.WriteLine(numero1); + >``` + +* **Decremento** + * subtrai-se uma unidade da variável em si próprio + * utilizando sintaxe com operador **Pré-fixado** + * colocando o símbolo de decremento *antes do operando* + + >```cs + > var numero1 = 2; + > --numero1; // + > Console.WriteLine(numero1); + >``` + +***Observação:*** + +* a sintaxe **Pré-fixado** tem ordem de precedência maior que a sintaxe **Pós-fixado** + * **`Console.WriteLine(numero1++ == --numero2);`** + * `--numero2` - será decrementado antes da comparação + * `numero1++` - será incrementado após a comparação + +* O exemplo acima, fere os princípios de Boas práticas, pois mistura: + * incremento + * decremento + * comparação diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 30 - Operador Tern\303\241rio.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 30 - Operador Tern\303\241rio.md" new file mode 100644 index 0000000..aa796a4 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/Aula 30 - Operador Tern\303\241rio.md" @@ -0,0 +1,30 @@ +# Aula 30 - Operador Ternário + +* OperadorTernario.cs +* {"Operador Ternário - Fundamentos", OperadorTernario.Executar}, + +* **Operador ternário** + * é um operador condicional + * pode compor uma expressão relacional + * ou expressão relacional e lógica + * retornará true ou false + +* > Observação: Só existe um operador ternário. + + * 3 Partes do operador ternário + + >```cs + > string resultado = nota >= 7.0 ? "Aprovado" : "Reprovado"; + >``` + + * Uma Expressão - que retorna verdadeiro ou falso + * `nota >= 7.0` + * Operando 1 - que será atribuído se a expressão for verdadeira + * `? "Aprovado"` + * Operando 2 - que será atribuído se a expressão for falsa + * `: "Reprovado"` + + * **`?`** - Expressão **SE** + * **`:`** - Expressão **SENÃO** + + * A atribução condicional, será feita conforme a sequências dos símbolos, por isso é muito importante posicionar as resposta corretamente. diff --git "a/Aulas/Se\303\247\303\243o 3 - Fundamentos/S03A23-Exemplo-TryParse.md" "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/S03A23-Exemplo-TryParse.md" new file mode 100644 index 0000000..8ceb2fc --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 3 - Fundamentos/S03A23-Exemplo-TryParse.md" @@ -0,0 +1,5 @@ +```cs +Console.Write("Digite sua idade: "); +int.TryParse(Console.ReadLine(), out int idade); +Console.WriteLine("Você tem {0} anos.", idade); +``` \ No newline at end of file diff --git "a/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 31 - Estrutura IF.md" "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 31 - Estrutura IF.md" new file mode 100644 index 0000000..e9b2277 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 31 - Estrutura IF.md" @@ -0,0 +1,89 @@ +# Aula 31 - Estrutura IF + +* EstruturaIf.cs +* `{"Estrutura If - Estruturas de Controle", EstruturaIf.Executar},` + +> ***Importando a nova estrutura no Program.cs*** + +* `using CursoCSharp.EstruturasDeControle;` + +## Funcionalidade + +* Serve para selecionar num conjunto + * uma ou mais sentença de códigos para ser executado ou não + +* **`if(exp)`** + * dentro dos parênteses terá uma expressão + * Essa *expressão* pode ter: + * vários operandos + * Essa expressão *sempre* irá retornar verdadeiro ou falso + + >```cs + > if (exp) + > Sentenca; + >``` + + * a primeira sentença logo após o **`if`** + * será executada se a *expressão* for verdadeira + * caso contrário não será executada + +* **`{ }`** - o uso das chaves são obrigatórias + * quando tivermos mais de uma sentença associadas à *expressão* + * serve para delimitar um bloco de sentenças + + >```cs + > if (exp) { + > Sentenca; + > Sentenca; + > Sentenca; + > } + >``` + + * Se a *expressão* for verdadeira o bloco associado será executado + * Se a *expressão* for falsa o bloco associado não será executado + +### Refatorando + +> **Obs.:** Quando a variável é do tipo booleana, não é necessário fazer uma *comparação relacional* para saber se ela é verdadeira ou falsa. + +```cs + bool bomComportamento = true; + + if (nota >= 9.0 && bomComportamento) +``` + +* nessa sentença a variável `bomComportamento` já é um operando lógico +* ou seja, **não precisamos** compará-la se verdadeira ou falsa, usando: + * `bomComportamento == true` + * isso seria como fazer a seguinte comparação `true == true` +* precisando testar o inverso + * negamos ela com **`!`** + * Ex.: **`!bomComportamento`** + +* A expressão **`if (exp)`**, pode ser substituída pela seguinte expressão: + + ```cs + bomComportamento = entrada == "S" || entrada == "s"; + ``` + + * Uma vez que queremos atribuir **true** + * à variável `bomComportamento` + * se a expressão é *verdadeira* + +* Podemos ainda utilizar uma outra sentença para substituir a comparação de **"S"** ou **"s"** + + ```cs + bomComportamento = entrada.ToLower() == "s"; + ``` + + * **`ToLower()`** - Função transformar todo caractere em minúsculo + +### Advertência + +* Na estrutura de controle não utilizamos o **`;`**. + * Uma única exceção ocorrerá quando + * + +* Estruturas de controle controlam a execução de uma ou mais sentenças + +* A estrutura **`If`** controla se uma ou um bloco de sentença será executado ou não. diff --git "a/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 32 - Estrutura IF - ELSE.md" "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 32 - Estrutura IF - ELSE.md" new file mode 100644 index 0000000..af0abb9 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 32 - Estrutura IF - ELSE.md" @@ -0,0 +1,27 @@ +# Aula 32 - Estrutura IF/ELSE + +* EstruturaIfElse.cs +* `{"Estrutura If Else - Estruturas de Controle", EstruturaIfElse.Executar},` + +* Sempre um dos dois será executado +* Nunca os dois serão executados + +```cs + double nota = 7.0; + + if (nota >= 7.0) { + Console.WriteLine("Aprovado!"); + Console.WriteLine("Não fez mais que sua obrigação..."); + } else { + Console.WriteLine("Recuperação"); + } +``` + +* **`if ()`** + * A utilização das **`{}`** se dá por haver mais de uma sentença para ser executada. + * Representando um bloco de código associado a ele + +* **`else`** + * a mesma sintaxe da utilização das **`{}`** no `if`, também serve para o `else` + * por convenção estética aplicaremos as ***chaves*** em todos os blocos `else` + * mesmo que haja apenas uma sentença para ser executada diff --git "a/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 33 - Estrutura IF - ELSE IF.md" "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 33 - Estrutura IF - ELSE IF.md" new file mode 100644 index 0000000..fcdcf21 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 33 - Estrutura IF - ELSE IF.md" @@ -0,0 +1,45 @@ +# Aula 33 - Estrutura IF/ELSE IF + +* EstruturaIfElseIf.cs +* `{"Estrutura If/Else/If - Estruturas de Controle", EstruturaIfElseIf.Executar},` + +* Com essa estrutura, poderemos trabalhar com múltiplas seleções, utilizando + +## Conceito + +* **`if()`** - para condição verdadeira +* **`else if()`** - associando uma outra condição para ser testada + +```cs + if (nota >= 9.0) { + Console.WriteLine("Quadro de Honra!"); + } else { + if (nota >= 7.0) { + Console.WriteLine("Aprovado!"); + } else { + if (nota >= 5.0) { + Console.WriteLine("Recuperação"); + } else { + Console.WriteLine("Te vejo na próxima..."); + } + } + } + + Console.WriteLine("Fim!"); +``` + +### Simplificando + +```cs + if (nota >= 9.0) { + Console.WriteLine("Quadro de Honra!"); + } else if (nota >= 7.0) { + Console.WriteLine("Aprovado!"); + } else if (nota >= 5.0) { + Console.WriteLine("Recuperação"); + } else { + Console.WriteLine("Te vejo na próxima..."); + } + + Console.WriteLine("Fim!"); +``` diff --git "a/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 34 - Estrutura SWITCH.md" "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 34 - Estrutura SWITCH.md" new file mode 100644 index 0000000..0237563 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 34 - Estrutura SWITCH.md" @@ -0,0 +1,55 @@ +# Aula 34 - Estrutura Switch + +* EstruturaSwitch.cs +* `{"Estrutura Switch - Estruturas de Controle", EstruturaSwitch.Executar},` + +### Conceito + +* Implementação de seleções múltiplas + +```cs + int nota = 0; + + switch (nota) { + case 0: + Console.WriteLine("Péssimo"); + break; + } +``` + +* **`switch (int) {}`** - onde `int` é um valor numérico + +* **`case 0:`** - onde `0` é um inteiro, sendo ele a primeira seleção + +* **`break;`** - utilizado para encerrar estrutura atual e vá para a linha posterior, após sua execução + * sendo obrigatório o uso dessa palavra reservada para cada `case` declarado + +> Observação: + +* Dentro de um `case` + * podemos ter mais de uma sentença de código, além do `break;` + + >```cs + > int nota = 5; + > + > switch (nota) { + > case 5: + > Console.WriteLine("Ótimo"); + > Console.WriteLine("Parabéns"); + > break; + > } + >``` + + * assim como também podemos ter um bloco de códigos `{}` + + >```cs + > int nota = 5; + > + > switch (nota) { + > case 5: { + > Console.WriteLine("Ótimo"); + > Console.WriteLine("Parabéns"); + > break; + > } + > } + >``` diff --git "a/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 35 - Estrutura WHILE.md" "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 35 - Estrutura WHILE.md" new file mode 100644 index 0000000..7c4f435 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 35 - Estrutura WHILE.md" @@ -0,0 +1,77 @@ +# Aula 35 - Estrutura While + +* EstruturaWhile.cs +* `{"Estrutura While - Estruturas de Controle", EstruturaWhile.Executar},` + +## Conceito + +* Associado ao `While` teremos uma sentença ou um bloco de códigos +* e essa sentença ou bloco de código, será executada **enquanto** a expressão `While` for verdadeira + +* Usado para uma quantidade de repetição **indeterminada** + * Quando não sabemos quantas repetições exatamente serão executadas + * via de regra o `While` vai se encaixar muito bem nesse cenário + +### **`Random()`** + +* Classe que gera número aleatório + +### Sessão de declaração + +```cs + // Sessão de declaração + int palpite = 0; + Random random = new Random(); + + int numeroSecreto = random.Next(1, 16); + bool numeroEncontrado = false; + int tentativasRestantes = 3; + int tentativas = 0; +``` + +* iniciando a variável `palpite` em 0, que é diferente do valor que o usuário digitar + +* **`Next(1, 16)`** - será gerado número aleatório entre + * `1` - sendo este número *inclusivo* e + * `16` - sendo este número *exclusivo* + +* iniciando a variável booleana `numeroEncontrado` com `false` + +* a variável `tentativasRestantes`, que irá controlar as repetições do **`While`**, será decrementada. + +* a variável `tentativas`, iniciada com zero, terá funcionalidade + * de incrementar o número de tentativas utilizadas + * e será utilizada pelo `While` que irá comparar se o usuário atingiu o número de tentativas + +### Sessão de Implementação + +```cs +// Sessão de Implementação +while (tentativasRestantes > 0 && !numeroEncontrado) { + ... + if (numeroSecreto == palpite) { + ... + var corAnterior = Console.BackgroundColor; + Console.BackgroundColor = ConsoleColor.Green; + ... + Console.BackgroundColor = corAnterior; + } +} +``` + +* **`var corAnterior = Console.BackgroundColor;`** + * Pega a cor atual do background do console para armazenar em uma variável + +* **`Console.BackgroundColor = ConsoleColor.Green;`** + * Altera a cor do background do console para verde + +* **`Console.BackgroundColor = corAnterior;`** + * Restaura a cor padrão, armazenada anteriormente na variável + +### Exemplo de Laço Infinito *(!CUIDADO)* + +>```cs +> while(true) { +> +> } +>``` diff --git "a/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 36 - Estrutura DO WHILE.md" "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 36 - Estrutura DO WHILE.md" new file mode 100644 index 0000000..206aa47 --- /dev/null +++ "b/Aulas/Se\303\247\303\243o 4 - Estruturas de Controle/Aula 36 - Estrutura DO WHILE.md" @@ -0,0 +1,14 @@ +# Aula 36 - Estrutura Do While + +* EstruturaDoWhile.cs +* `{"Estrutura Do While - Estruturas de Controle", EstruturaDoWhile.Executar},` + +## Conceito + +* Essa é a única estrutura que termina com **`;`**. +* Nessa estrutura o bloco vem antes da expressão +* O bloco é executado pelo menos uma vez +* Somente ao final da primeira execução que testa a condição +* Ela é uma estrutura menos usada +* Quantidade indeterminada de repetições + diff --git a/CursoCSharp/CursoCSharp.sln b/CursoCSharp/CursoCSharp.sln new file mode 100644 index 0000000..6ad921e --- /dev/null +++ b/CursoCSharp/CursoCSharp.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.1500 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CursoCSharp", "CursoCSharp\CursoCSharp.csproj", "{221B5627-003F-4C52-A6B4-B84B96949485}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {221B5627-003F-4C52-A6B4-B84B96949485}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {221B5627-003F-4C52-A6B4-B84B96949485}.Debug|Any CPU.Build.0 = Debug|Any CPU + {221B5627-003F-4C52-A6B4-B84B96949485}.Release|Any CPU.ActiveCfg = Release|Any CPU + {221B5627-003F-4C52-A6B4-B84B96949485}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D4922850-EEA3-4B65-BBD8-3B02F9A79F12} + EndGlobalSection +EndGlobal diff --git a/CursoCSharp/CursoCSharp/CentralDeExercicios.cs b/CursoCSharp/CursoCSharp/CentralDeExercicios.cs new file mode 100644 index 0000000..ec54416 --- /dev/null +++ b/CursoCSharp/CursoCSharp/CentralDeExercicios.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace CursoCSharp { + public class CentralDeExercicios { + Dictionary Exercicios; + + public CentralDeExercicios(Dictionary exercicios) { + Exercicios = exercicios; + } + + public void SelecionarEExecutar() { + int i = 1; + + foreach (var exercicio in Exercicios) { + Console.WriteLine("{0}) {1}", i, exercicio.Key); + i++; + } + + Console.Write("Digite o número (ou vazio para o último)? "); + + int.TryParse(Console.ReadLine(), out int num); + bool numValido = num > 0 && num <= Exercicios.Count; + num = numValido ? num - 1 : Exercicios.Count - 1; + + string nomeDoExercicio = Exercicios.ElementAt(num).Key; + + Console.Write("\nExecutando exercício "); + Console.BackgroundColor = ConsoleColor.Yellow; + Console.ForegroundColor = ConsoleColor.Black; + Console.WriteLine(nomeDoExercicio); + Console.ResetColor(); + + Console.WriteLine(String.Concat( + Enumerable.Repeat("=", nomeDoExercicio.Length + 21)) + "\n"); + + Action executar = Exercicios.ElementAt(num).Value; + try { + executar(); + } catch(Exception e) { + Console.BackgroundColor = ConsoleColor.Red; + Console.ForegroundColor = ConsoleColor.White; + Console.WriteLine("Ocorreu um erro: {0}", e.Message); + Console.ResetColor(); + + Console.WriteLine(e.StackTrace); + } + } + } +} \ No newline at end of file diff --git a/CursoCSharp/CursoCSharp/CursoCSharp.csproj b/CursoCSharp/CursoCSharp/CursoCSharp.csproj new file mode 100644 index 0000000..22f479e --- /dev/null +++ b/CursoCSharp/CursoCSharp/CursoCSharp.csproj @@ -0,0 +1,9 @@ + + + + Exe + netcoreapp2.1 + + + + diff --git a/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaDoWhile.cs b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaDoWhile.cs new file mode 100644 index 0000000..7e58ca3 --- /dev/null +++ b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaDoWhile.cs @@ -0,0 +1,21 @@ +using System; + +namespace CursoCSharp.EstruturasDeControle +{ + class EstruturaDoWhile + { + public static void Executar() { + string entrada; + + do + { + Console.WriteLine("Qual o seu nome?"); + entrada = Console.ReadLine(); + + Console.WriteLine("Seja bem-vindo {0}", entrada); + Console.WriteLine("Deseja continuar? (S/N)"); + entrada = Console.ReadLine(); + } while (entrada.ToLower() == "s"); + } + } +} diff --git a/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIf.cs b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIf.cs new file mode 100644 index 0000000..ae1694d --- /dev/null +++ b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIf.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.EstruturasDeControle +{ + class EstruturaIf + { + public static void Executar() { + bool bomComportamento = false; + string entrada; + + Console.Write("Digite a nota do aluno: "); + entrada = Console.ReadLine(); + Double.TryParse(entrada, out double nota); + + Console.Write("Possui bom comportamento (S/N): "); + entrada = Console.ReadLine(); + + //if (entrada == "S" || entrada == "s") + // bomComportamento = true; + + //bomComportamento = entrada == "S" || entrada == "s"; + bomComportamento = entrada.ToLower() == "s"; + + if (nota >= 9.0 && bomComportamento) { + Console.WriteLine("Quadro de honra!"); + } + } + } +} diff --git a/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIfElse.cs b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIfElse.cs new file mode 100644 index 0000000..2fdaff4 --- /dev/null +++ b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIfElse.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.EstruturasDeControle +{ + class EstruturaIfElse + { + public static void Executar() { + double nota = 6.0; + + if (nota >= 7.0) { + Console.WriteLine("Aprovado!"); + Console.WriteLine("Não fez mais que sua obrigação..."); + } else { + Console.WriteLine("Recuperação"); + } + } + } +} diff --git a/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIfElseIf.cs b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIfElseIf.cs new file mode 100644 index 0000000..2d6ec1a --- /dev/null +++ b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaIfElseIf.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.EstruturasDeControle +{ + class EstruturaIfElseIf + { + public static void Executar() { + Console.Write("Digite a nota do aluno: "); + + string entrada = Console.ReadLine(); + Double.TryParse(entrada, out double nota); + + if (nota >= 9.0) { + Console.WriteLine("Quadro de Honra!"); + } else if (nota >= 7.0) { + Console.WriteLine("Aprovado!"); + } else if (nota >= 5.0) { + Console.WriteLine("Recuperação"); + } else { + Console.WriteLine("Te vejo na próxima..."); + } + + Console.WriteLine("Fim!"); + } + } +} diff --git a/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaSwitch.cs b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaSwitch.cs new file mode 100644 index 0000000..ae11ced --- /dev/null +++ b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaSwitch.cs @@ -0,0 +1,37 @@ +using System; + +namespace CursoCSharp.EstruturasDeControle +{ + class EstruturaSwitch + { + public static void Executar() { + Console.Write("Avalie meu atendimento com uma nota de 0 a 5: "); + int.TryParse(Console.ReadLine(), out int nota); + + switch (nota) { + case 0: + Console.WriteLine("Péssimo"); + break; + case 1: + case 2: + Console.WriteLine("Ruim"); + break; + case 3: + Console.WriteLine("Regular"); + break; + case 4: + Console.WriteLine("Bom"); + break; + case 5: + Console.WriteLine("Ótimo"); + Console.WriteLine("Parabéns!"); + break; + default: + Console.WriteLine("Nota inválida"); + break; + } + + Console.WriteLine("Obrigado por participar de nossa pesquisa."); + } + } +} \ No newline at end of file diff --git a/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaWhile.cs b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaWhile.cs new file mode 100644 index 0000000..05c8d17 --- /dev/null +++ b/CursoCSharp/CursoCSharp/EstruturasDeControle/EstruturaWhile.cs @@ -0,0 +1,46 @@ +using System; + +namespace CursoCSharp.EstruturasDeControle +{ + class EstruturaWhile + { + public static void Executar() { + int palpite = 0; + Random random = new Random(); + + int numeroSecreto = random.Next(1, 16); + bool numeroEncontrado = false; + int tentativasRestantes = 3; + int tentativas = 0; + + while (tentativasRestantes > 0 && !numeroEncontrado) { + Console.Write("Insira o seu palpite: "); + string entrada = Console.ReadLine(); + int.TryParse(entrada, out palpite); + + tentativas++; + tentativasRestantes--; + + var corAnterior = Console.BackgroundColor; + + if (numeroSecreto == palpite) { + numeroEncontrado = true; + //var corAnterior = Console.BackgroundColor; + Console.BackgroundColor = ConsoleColor.Green; + Console.WriteLine("Número encontrado em {0} tentativa(s)", tentativas); + Console.BackgroundColor = corAnterior; + } else if (palpite > numeroSecreto) { + Console.WriteLine("Menor...Tente novamente!"); + Console.BackgroundColor = ConsoleColor.DarkYellow; + Console.WriteLine("Tentativas restantes: {0}", tentativasRestantes); + Console.BackgroundColor = corAnterior; + } else { + Console.WriteLine("Maior...Tente novamente!"); + Console.BackgroundColor = ConsoleColor.DarkMagenta; + Console.WriteLine("Tentativas restantes: {0}", tentativasRestantes); + Console.BackgroundColor = corAnterior; + } + } + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/Comentarios.cs b/CursoCSharp/CursoCSharp/Fundamentos/Comentarios.cs new file mode 100644 index 0000000..0ce2f99 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/Comentarios.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos { + + /// + /// + /// + class Comentarios { + public static void Executar() { + // Cuidado com os comentários desnecessários + Console.WriteLine("Código claro é sempre melhor!"); + + Console.WriteLine("O C# tem o XML Comments"); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/Conversoes.cs b/CursoCSharp/CursoCSharp/Fundamentos/Conversoes.cs new file mode 100644 index 0000000..b9cface --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/Conversoes.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class Conversoes + { + public static void Executar() { + int inteiro = 10; + double quebrado = inteiro; + Console.WriteLine(quebrado); + + double nota = 9.7; + int notaTruncada = (int) nota; + Console.WriteLine("Nota truncada: {0}", notaTruncada); + + Console.Write("Digite sua idade: "); + string idadeString = Console.ReadLine(); + int idadeInteiro = int.Parse(idadeString); + Console.WriteLine("Idade inserida {0}", idadeInteiro); + + idadeInteiro = Convert.ToInt32(idadeString); + Console.WriteLine("Resultado {0}", idadeInteiro); + + Console.Write("Digite o primeiro número: "); + string palavra = Console.ReadLine(); + int numero1; + int.TryParse(palavra, out numero1); + Console.WriteLine("Resultado 1: {0}", numero1); + + Console.Write("Digite o segundo número: "); + int.TryParse(Console.ReadLine(), out int numero2); + Console.WriteLine("Resultado 2: {0}", numero2); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/FormatandoNumero.cs b/CursoCSharp/CursoCSharp/Fundamentos/FormatandoNumero.cs new file mode 100644 index 0000000..acdcd6a --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/FormatandoNumero.cs @@ -0,0 +1,25 @@ +using System; +using System.Globalization; + +namespace CursoCSharp.Fundamentos +{ + class FormatandoNumero + { + public static void Executar() { + double valor = 15.175; + Console.WriteLine(valor.ToString("F1")); + Console.WriteLine(valor.ToString("C")); + Console.WriteLine(valor.ToString("P")); + Console.WriteLine(valor.ToString("#.##")); + + CultureInfo culturaBr = new CultureInfo("pt-BR"); + Console.WriteLine(valor.ToString("C0", culturaBr)); + + CultureInfo culturaUs = new CultureInfo("en-US"); + Console.WriteLine(valor.ToString("C3", culturaUs)); + + int inteiro = 256; + Console.WriteLine(inteiro.ToString("D10")); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/Inferencia.cs b/CursoCSharp/CursoCSharp/Fundamentos/Inferencia.cs new file mode 100644 index 0000000..40e689a --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/Inferencia.cs @@ -0,0 +1,24 @@ +using System; + +namespace CursoCSharp.Fundamentos +{ + class Inferencia + { + public static void Executar() { + var nome = "Hamilton"; + // nome = 123; + Console.WriteLine(nome); + + // int idade; + var idade = 41; + Console.WriteLine(idade); + + int a; + a = 3; + + int b = 2; + + Console.WriteLine(a + b); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/Interpolacao.cs b/CursoCSharp/CursoCSharp/Fundamentos/Interpolacao.cs new file mode 100644 index 0000000..93c14f2 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/Interpolacao.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class Interpolacao + { + public static void Executar() { + string nome = "Notebook Gamer"; + string marca = "Dell"; + double preco = 5800.00; + + Console.WriteLine("O " + nome + " da marca " + + marca + " custa R$" + preco + "."); + + Console.WriteLine("O {0} da marca {1} custa R${2}.", + nome, marca, preco); + + Console.WriteLine($"A marca {marca} é legal!"); + + Console.WriteLine($"A soma de 1 + 1 = {1 + 1}"); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/LendoDados.cs b/CursoCSharp/CursoCSharp/Fundamentos/LendoDados.cs new file mode 100644 index 0000000..f807677 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/LendoDados.cs @@ -0,0 +1,22 @@ +using System; +using System.Globalization; + +namespace CursoCSharp.Fundamentos +{ + class LendoDados + { + public static void Executar() { + Console.Write("Qual o seu nome? "); + string nome = Console.ReadLine(); + + Console.Write("Qual é a sua idade? "); + int idade = int.Parse(Console.ReadLine()); + + Console.Write("Qual é o seu salário? "); + double salario = double.Parse(Console.ReadLine(), + CultureInfo.InvariantCulture); + + Console.WriteLine($"{nome} tem {idade} anos e recebe um salário de R${salario}"); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/NotacaoPonto.cs b/CursoCSharp/CursoCSharp/Fundamentos/NotacaoPonto.cs new file mode 100644 index 0000000..56e4477 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/NotacaoPonto.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class NotacaoPonto + { + public static void Executar() { + var saudacao = "olá".ToUpper().Insert(3, " World!") + .Replace("World!", "Mundo!"); + Console.WriteLine(saudacao); + + Console.WriteLine("Teste".Length); + + string valorImportante = null; + Console.WriteLine(valorImportante?.Length); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/OperadorTernario.cs b/CursoCSharp/CursoCSharp/Fundamentos/OperadorTernario.cs new file mode 100644 index 0000000..7dae311 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/OperadorTernario.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class OperadorTernario + { + public static void Executar() { + var nota = 7.0; + bool bomComportamento = false; + string resultado = nota >= 7.0 && bomComportamento + ? "Aprovado" : "Reprovado"; + + Console.WriteLine(resultado); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/OperadoresAritmeticos.cs b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresAritmeticos.cs new file mode 100644 index 0000000..a90d138 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresAritmeticos.cs @@ -0,0 +1,37 @@ +using System; +using System.Globalization; + +namespace CursoCSharp.Fundamentos +{ + class OperadoresAritmeticos + { + public static void Executar() { + // Preço Desconto + var preco = 1000.0; + var imposto = 355; + var desconto = 0.1; + + double total = preco + imposto; + var totalComDesconto = total - (total * desconto); + + CultureInfo culturaBr = new CultureInfo("pt-BR"); + Console.WriteLine($"O total do Preço + Imposto é de {total.ToString("C", culturaBr)}"); + Console.WriteLine($"Com o Desconto de {desconto.ToString("P0")}"); + Console.WriteLine("O preço final é {0}", totalComDesconto.ToString("C", culturaBr)); + + // IMC + double peso = 93.3; + double altura = 1.88; + double imc = peso / Math.Pow(altura, 2); + + Console.WriteLine($"O seu IMC é {imc.ToString("F1")}."); + + // Número Par/Impar + int par = 24; + int impar = 55; + + Console.WriteLine("{0}/2 tem resto {1}", par, par % 2); + Console.WriteLine("{0}/2 tem resto {1}", impar, impar % 2); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/OperadoresAtribuicao.cs b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresAtribuicao.cs new file mode 100644 index 0000000..ed2df89 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresAtribuicao.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class OperadoresAtribuicao + { + public static void Executar() { + var num1 = 3; + num1 = 7; + num1 += 10; + num1 -= 3; + num1 *= 5; + num1 /= 2; + + Console.WriteLine(num1); + + int a = 1; + int b = a; + + a++; + b--; + + Console.WriteLine($"{a} {b}"); + + // Não se preocupe com essa parte do código + dynamic c = new System.Dynamic.ExpandoObject(); + c.nome = "João"; + + dynamic d = c; + d.nome = "Maria"; + + Console.WriteLine(c.nome); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/OperadoresLogicos.cs b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresLogicos.cs new file mode 100644 index 0000000..ea025f7 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresLogicos.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class OperadoresLogicos + { + public static void Executar() { + var executouTrabalho1 = true; + var executouTrabalho2 = false; + + bool comprouTv50 = executouTrabalho1 && executouTrabalho2; + Console.WriteLine("Comprou a Tv 50? {0}", comprouTv50); + + var comprouSorvete = executouTrabalho1 || executouTrabalho2; + Console.WriteLine("Comprou o sorvete? {0}", comprouSorvete); + + var comprouTv32 = executouTrabalho1 ^ executouTrabalho2; + Console.WriteLine("Comprou a Tv 32? {0}", comprouTv32); + + Console.WriteLine("Mais saudável? {0}", !comprouSorvete); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/OperadoresRelacionais.cs b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresRelacionais.cs new file mode 100644 index 0000000..f04f4ff --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresRelacionais.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class OperadoresRelacionais + { + public static void Executar() { + // double nota = 6.0; + Console.Write("Digite a nota: "); + double.TryParse(Console.ReadLine(), out double nota); + double notaDeCorte = 7.0; + + Console.WriteLine("Nota inválida? {0}", nota > 10.0); + Console.WriteLine("Nota inválida? {0}", nota < 0.0); + Console.WriteLine("Perfeito? {0}", nota == 10.0); + Console.WriteLine("Tem como melhorar? {0}", nota != 10.0); + Console.WriteLine("Passou por média? {0}", nota >= notaDeCorte); + Console.WriteLine("Recuperação? {0}", nota < notaDeCorte); + Console.WriteLine("Reprovado? {0}", nota <= 3.0); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/OperadoresUnarios.cs b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresUnarios.cs new file mode 100644 index 0000000..d2c8e44 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/OperadoresUnarios.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class OperadoresUnarios + { + public static void Executar() { + var valorNegativo = -5; + var numero1 = 2; + var numero2 = 3; + var booleano = true; + + Console.WriteLine(-valorNegativo); + Console.WriteLine(!booleano); + + numero1++; + Console.WriteLine(numero1); + + --numero1; + Console.WriteLine(numero1); + + Console.WriteLine(numero1++ == --numero2); + Console.WriteLine($"{numero1} {numero2}"); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/PrimeiroPrograma.cs b/CursoCSharp/CursoCSharp/Fundamentos/PrimeiroPrograma.cs new file mode 100644 index 0000000..8ff2615 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/PrimeiroPrograma.cs @@ -0,0 +1,11 @@ +using System; + +namespace CursoCSharp.Fundamentos { + class PrimeiroPrograma { + public static void Executar() { + Console.Write("Primeiro "); + Console.WriteLine("Programa"); + Console.WriteLine("Terminou!"); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Fundamentos/VariaveisEConstantes.cs b/CursoCSharp/CursoCSharp/Fundamentos/VariaveisEConstantes.cs new file mode 100644 index 0000000..454820c --- /dev/null +++ b/CursoCSharp/CursoCSharp/Fundamentos/VariaveisEConstantes.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace CursoCSharp.Fundamentos +{ + class VariaveisEConstantes + { + public static void Executar() { + // área da circunferência + double raio = 4.5; + const double PI = 3.14; + + // modificando o valor da variável + raio = 5.5; + //PI = 3.1415; -> mostra que não é possível alterar uma constante + + double area = PI * raio * raio; + Console.WriteLine(area); + Console.WriteLine("A área da da circunferência é: " + area); + + // Tipo internos + + bool estaChovendo = true; + Console.WriteLine("Está chovendo? " + estaChovendo); + + //byte idade = 41; + byte idade = byte.MaxValue; + Console.WriteLine("Idade " + idade); + + sbyte saldoDeGols = sbyte.MinValue; + Console.WriteLine("Saldo de Gols " + saldoDeGols); + + short salario = short.MaxValue; + Console.WriteLine("Salario " + salario); + + int menorValor = int.MinValue; // Mais usado dos inteiros! + Console.WriteLine("Menor Int " + menorValor); + + uint populacaoBrasileira = 207_600_000; // podemos usar o "_" como separador universal + Console.WriteLine("População 'fake' brasileira é " + populacaoBrasileira); + + long menorValorLong = long.MinValue; + Console.WriteLine("Menor long " + menorValorLong); + + ulong populacaoMundial = 7_600_000_000; + Console.WriteLine("População Mundial " + populacaoMundial); + + float precoComputador = 1299.99F; + Console.WriteLine("Preço Computador " + precoComputador); + + double valorDeMercadoDaApple = 1_000_000_000_000.00; // Mais usado dos reais! + Console.WriteLine("Valor de mercado da Apple " + valorDeMercadoDaApple); + + decimal distanciaEntreEstrelas = decimal.MaxValue; + Console.WriteLine("Distância entre as estrelas " + distanciaEntreEstrelas); + + char letra = 'b'; + Console.WriteLine("Letra " + letra); + + string texto = "Seja bem vindo ao Curso de C#!"; + Console.WriteLine(texto); + } + } +} diff --git a/CursoCSharp/CursoCSharp/Program.cs b/CursoCSharp/CursoCSharp/Program.cs new file mode 100644 index 0000000..c716bf1 --- /dev/null +++ b/CursoCSharp/CursoCSharp/Program.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; + +using CursoCSharp.Fundamentos; +using CursoCSharp.EstruturasDeControle; + +namespace CursoCSharp +{ + class Program + { + static void Main(string[] args) { + var central = new CentralDeExercicios(new Dictionary() { + // Fundamentos + {"Primeiro Programa - Fundamentos", PrimeiroPrograma.Executar}, + {"Comentários - Fundamentos", Comentarios.Executar}, + {"Variáveis e Constantes - Fundamentos", VariaveisEConstantes.Executar}, + {"Inferências - Fundamentos", Inferencia.Executar}, + {"Interpolação de Strings - Fundamentos", Interpolacao.Executar}, + {"Notação Ponto - Fundamentos", NotacaoPonto.Executar}, + {"Lendo Dados - Fundamentos", LendoDados.Executar}, + {"Formatando Número - Fundamentos", FormatandoNumero.Executar}, + {"Conversões - Fundamentos", Conversoes.Executar}, + {"Operadores Aritméticos - Fundamentos", OperadoresAritmeticos.Executar}, + {"Operadores Relacionais - Fundamentos", OperadoresRelacionais.Executar}, + {"Operadores Lógicos - Fundamentos", OperadoresLogicos.Executar}, + {"Operadores Atribuição - Fundamentos", OperadoresAtribuicao.Executar}, + {"Operadores Unários - Fundamentos", OperadoresUnarios.Executar}, + {"Operador Ternário - Fundamentos", OperadorTernario.Executar}, + + // Estruturas de Controle + {"Estrutura If - Estruturas de Controle", EstruturaIf.Executar}, + {"Estrutura If/Else - Estruturas de Controle", EstruturaIfElse.Executar}, + {"Estrutura If/Else/If - Estruturas de Controle", EstruturaIfElseIf.Executar}, + {"Estrutura Switch - Estruturas de Controle", EstruturaSwitch.Executar}, + {"Estrutura While - Estruturas de Controle", EstruturaWhile.Executar}, + {"Estrutura Do While - Estruturas de Controle", EstruturaDoWhile.Executar}, + }); + + central.SelecionarEExecutar(); + } + } +} \ No newline at end of file