Por que utilizar o navegador Chrome?

O Google é sem dúvida o melhor buscador do mundo e do Brasil, infelizmente não é o campeão na China mas está em busca disto. Uma imensa vantagem deste navegador que é desconhecida por alguns os quais acreditam que isso seja um defeito é a possibilidade de gravar nossos “padrões”, links visitados, preferências, senhas, históricos e etc. através de nosso gmail. A opção de poder se logar com o Gmail no Chrome é algo que faz seu ambiente de Internet ir com você a qualquer lugar que você vá.

Já imaginou sua vida toda na Web ligada a sua conta? Você sabe exatamente onde clicou, seja vídeos, imagens e etc. Todos os sites que visitou, pode bloquear alguns que não gostou inclusive denunciar. As propagandas que aparecem são relacionadas ao que você tem interesse na internet, os sites são ranqueados de acordo com o que você já buscou, lugar que você está, proximidade entre você e a empresa se for algum serviço, parceria entre outros sites que você frequenta e muito mais.

Caso você tema o fato do navegador ter seus dados pessoais basta criar mais de uma conta para gravar diferentes padrões ou apenas não estar logado, tem também a opção anônima para que nenhum de seus dados seja salvo deixando impossível alguém que tenha acesso ao mesmo computador saber por onde você andou fuçando na Web.

É possível também levar suas extensões com você, para profissionais de SEO (Optmização para mecanismos de busca), Desenvolvedores Web e outros que dependem de certos recursos é imprescindível esta função pois ao fazer login em sua conta Gmail todas suas extensões são importadas para o navegador. Se quiser saber mais sobre SEO, acesse, tutorialde.com.br.

O que são os Processos do sistema operacional?

Quem usa computadores com certa frequência já se deparou com a palavra processo. Pois bem, este artigo vai explicar os conceitos básicos sobre processos de um sistema operacional. Você verá como é importante aprender a identificar os elementos do Gerenciador de Tarefas para manter tudo sob controle. Boa leitura!

O que são processos

Um sistema operacional não executa somente os programa que podemos ver. Imagine que os aplicativos que você roda reúnem diversas instruções e comandos, porém, são os processos que efetivamente executam esses comandos. Isso significa que um único aplicativo pode ter vários processos relacionados a ele. Por exemplo, o navegador Google Chrome, que executa uma nova tarefa a cada aba aberta. Essa medida permite que cada aba seja gerenciada individualmente e, mesmo que uma trave, as outras continuam trabalhando normalmente.

Simplificando, os processos representam tarefas em execução, mas nem todas têm relação direta com algum aplicativo. Muitas delas são executadas em pano de fundo e mantêm o sistema trabalhando – gerenciando redes, memória, disco, checagem antivírus, etc. Logo, podemos definir processos como softwares que executam alguma ação e que podem ser controlados de alguma maneira, seja pelo usuário, pelo aplicativo correspondente ou pelo sistema operacional.

Componentes de um processo

Um processo tem uma série de características próprias. A estrutura básica é formada por uma imagem do código executável associado a um programa. A memória contém o código executável e dados específicos. Há também a descrição de recursos do sistema alocados ao processo, informações de atributos de segurança e a indicação do estado atual.

Um processo passa por diferentes estados desde sua criação até seu término. Enquanto ele é criado, seu estado é considerado “Novo”; em ação, muda para “Executando”; quando depende da ocorrência de algum evento, vira “Esperando”; quando não mais necessário, o processo é “Terminado”. O sistema operacional reúne todas essas informações através de estruturas específicas chamadas PCB (sigla de Process Control Blocks, o que em tradução livre seria Blocos de Controle de Processos).

O importantíssimo Gerenciador de Tarefas
Agora que você sabe um pouco mais sobre processos, vai entender melhor a importância do Gerenciador de Tarefas do Windows. Lembrando como acessá-lo: use a combinação Ctrl+Alt+Del e selecione Gerenciador de Tarefas. Com a janela aberta, acesse a aba “Processos”. Esta é a lista dos processos em execução no momento. Atente para um detalhe: à primeira vista, a lista pode não ser tão grande. Isso se explica porque o Gerenciador de Tarefas filtra alguns processos por padrão. Para visualizar a relação completa, clique no botão “Mostrar processos de todos usuários”.

Você vê o nome do processo, o nome do usuário relacionado e dois indicadores fundamentais para se certificar de que tudo está correndo bem: CPU e Memória. Atente para os níveis destes campos, pois um valor muito alto indica algum problema. Na imagem acima, o navegador Firefox acusa o consumo de quase 300 MB de memória RAM. Isso significa que o navegador está com muitas abas abertas ou executando alguma tarefa pesada. Quem não tem tanta memória RAM sobrando deve ponderar se é necessário manter tantas tarefas simultâneas no navegador.

Observe outros processos que consomem muita memória ou processador, pois significa que eles estão bastante ativos. Além de desperdiçar memória, os “comilões” podem esconder um grande perigo: os vírus ou outros arquivos perigosos – como programas espiões – em ação. Mesmo quando não perigosos, os processos podem ser simplesmente inúteis. Isso é comum, pois nem sempre o sistema consegue se desfazer completamente. No entanto, alguns processos podem parecer inativos, mas eles não podem ser terminados. Para terminar um processo, basta selecioná-lo e clicar em “Finalizar processo”.

Não é tarefa fácil observar todos os processos para assegurar que eles não são maliciosos, nem mesmo para usuários avançados. Mas há ferramentas que ajudam você a identificar cada processo ativo.

O Fileinspect, é um banco de dados onde você só precisa digitar o nome do processo para descobrir qual programa ativou e qual a utilidade para o sistema.

Se o Fileinspect não ajudar, a internet é uma vasta fonte. É comum achar discussões em fóruns de informática sobre processos “comilões” e/ou perigosos. Basta pesquisar pelo nome, dificilmente você ficará sem informações.

Problemas com processos

Alguma vez você fechou um programa, precisou executá-lo novamente, mas ele não abriu? E você recebeu um aviso de que uma instância do programa já estava em execução? Fique tranquilo, este é um problema muito simples de resolver. O que aconteceu é que, por algum motivo, o processo do programa não foi terminado corretamente. Tudo que você precisa fazer é acessar o Gerenciador de Tarefas e finalizar o aplicativo em questão. Um programa que frequentemente passa por essa situação é o Steam.

Agora que você sabe mais sobre processos, explore mais o Gerenciador de Tarefas e veja quantas execuções inúteis você pode finalizar. O computador pode ficar mais rápido com menos tarefas simultâneas. Mas tenha cuidado: se você não tem certeza, então deixe o processo como está. Esperamos ter ajudado. Até a próxima!

Processador i3, i5 ou i7

Vamos abordar os processadores além de apenas especificações técnicas, mostrando suas origens e aperfeiçoamentos dentro de um contexto evolutivo.

A Microarquitetura dos processadores da Intel é impressionante, comprovando que a tecnologia avança sobre qualquer barreira. Nos processadores Intel i3, i5 e i7 vamos destacar três gerações de microarquitetura que serão caracterizadas no desenvolvimento abaixo.

A primeira geração é a Nehalem produzida em 2008 com uma lisura de 45 nanômetros e com soquete de 1366 pinos. A segunda geração é a Sandy Bridge produzida em 2011 até o presente, diferenciando-se da anterior por possuir 32 nanômetros com soquete de 1155 pinos. A terceira geração é a Ivy Bridge que já foi lançada, mas está prevista para  só ser produzida ainda no mês de junho deste ano, com a vantagem de ter uma lisura de 22 nanômetros, mas com o soquete de 1155 pinos igual ao da Sandy Bridge.

A percepção sobre as distinções é clara diante das transformações que há em cada geração das três acima mencionadas; cada uma foi caracterizada e todas tiveram seu marco no processo de desenvolvimento e aperfeiçoamento, pois uma dependeu da outra para que houvesse evolução no desempenho dos processadores i3, i5 e i7.

A tecnologia Hyper-Threading, já em utilização maciça desde os processadores Pentium, foi novamente utilizada nos processadores i’s, tornando possível que um único núcleo fosse capaz de executor múltiplos encadeamentos de execução, os chamados threads. Desenvolvida quando os processadores de múltiplos núcleos ainda eram inviáveis comercialmente, teve a priori um foco nos processadores para servidores de rede, sendo rapidamente incluída nos demais processadores da intel como um grande diferencial com promessa de melhora de até 24% na performance.

Em síntese, a tecnologia Hyper-threading aproveita o tempo em que o processador espera dados de um processo, utilizando essa “Ociosidade” para um novo processo, conseguindo assim ganhos reais na execução de múltiplas tarefas.

O processador Intel ® Core ™ i3 vem de uma arquitetura diferenciada que permite aumentar os níveis de inteligência, desempenho, mídia e recursos gráficos dos processadores atuais. Atualmente há duas gerações do processador Core i3 no mercado com arquiteturas completamente diferentes. Os modelos 5xx(Desktops) e 3xx(notebooks) baseados na microarquitetura Nehalem, enquanto os modelos 21xx(Desktops) e 23xx(Notebooks) são baseados na microarquitetura “Sandy Bridge”, ambos com incríveis poderes de processamento e tecnologias inovadoras.

Os processadores Core i3 têm também um controlador PCI Express 2.0 integrado; logo, nesses processadores a placa de vídeo  externa está conectada diretamente ao processador, o que em teoria pode aumentar a taxa de transferência que a placa de vídeo pode obter na prática. Esses processadores podem acessar uma placa de vídeo na velocidade x16 ou duas placas de vídeo  na velocidade x8 cada. Como nesses modelos o controlador PCI Express 2.0 fica dentro do processador, a Intel decidiu usar um barramento de menor velocidade chamado DMI (Digital Media Interface), que opera a 1 GB/s (nos processadores Core i3 de primeira geração) ou 2 GB/s (nos processadores Core i3 de segunda geração) em cada direção, para conectar o processador ao chipset. Esse barramento era usado na comunicação entre a ponte norte e a ponte sul nos chipsets anteriores da Intel. Essa largura de banda aparentemente baixa não é problema, já que um barramento externo de alta velocidade para a comunicação com o chipset não é mais necessário visto que tanto a placa de vídeo quanto a memória estão conectadas diretamente ao processador.

O core i5 foi lançado em setembro de 2009, sendo chamado de core i5 750. O core I5 750 foi o 1º core com uma frequência de 2.66 Ghz com 4 núcleos (quad-core), possuindo um cache L3 de 8MB. O L3 ou nível 3 são níveis da memória cache com 3 níveis, mas sendo que o L3 armazena mais que os níveis L1 e L2, o L2 mais rápido que o L3 e o L1 mais rápido que o L2. Em relação aos núcleos o core i5, a Intel declarou que o core I5 iria ter 3 núcleos diferentes, começando com o primeiro da serie Lynn Field.

O Lynn Field foi iniciado no core i5 750, trazendo uma principal vantagem em relação ao núcleo Bloom Field. A vantagem foi a introdução de um controlador gráfico embutida no próprio processador, agilizando a comunicação do processador com a placa de vídeo criando um elo entre a CPU e a GPU.

Na segunda série, chamada de Arrandale, que veio a substituir a serie Lynn Field, foi feito com lisura de 32 nm proporcionando maior economia de energia comparado ao Lynn Field com lisura de 45 nm. A terceira série, a Clark, possui um núcleo da série i5 destinada a Desktops com uma memória cache um pouco maior se comparado ao núcleo Arrandale. A sua vantagem, se comparado aos outros, é o Hyper-Threading que estará ativado nesses modelos.       

Core i7 é uma série de processadores da Intel voltada para “entusiastas”, ou seja, são os modelos com maior desempenho desenvolvido pela Intel. Há duas gerações deste processador no mercado, com arquiteturas completamente diferentes. Os modelos 6xx, 7xx, 8xx e 9xx são baseados na arquitetura “Nehalem” também conhecidos como “primeira geração”, que são os modelos de 64nm; já os modelos 26xx, 28xx e 29xx são baseados na microarquitetura do “Sandy Bridge” e conhecidos como “segunda geração”.

Os processadores de antigamente utilizavam um controlador de memória externo localizado no chip ponte norte (também conhecido como MCH ou Hub Controlador de Memória) do chipset. Isto significa que em processadores usando esta arquitetura o chipset (e consequentemente a placa-mãe) é o componente que determina qual a tecnologia e a quantidade de memória que você pode instalar no micro. Com a linha de processadores “Core i” o controlador de memória passou a estar embutido no processador, é este – e não mais o chipset – que define qual tecnologia e a quantidade que você pode instalar no micro. A placa-mãe, no entanto, pode ter uma limitação na quantidade de memória instalada.

Os processadores i7 possuem uma tecnologia chamada “Turbo Boost” que como o próprio nome diz é um tipo de “Turbinada (Overclock)” – quando o processador percebe que precisa de mais poder de processamento, ele aumenta o seu clock interno acima do padrão, automaticamente.

Refletir sobre o impacto do avanço tecnológico no mundo é importante, pois leva-nos sempre à evolução e isso é positivo, tratando-se de sempre progredir, e não regredir, principalmente quando falamos em arquitetura de computadores, para melhor especificar sobre, neste caso, o hardware em si.

 

Weka

WEKA é uma ferramenta que agrega algoritmos provenientes a uma determinada abordagem aplicando uma análise dos dados fornecidos e retornando hipóteses para soluções sendo possível o estudo da aprendizagem por parte das maquinas.

Você vai precisar de:

Download do Weka (Windows e Linux)

Download do Java

Sua utilização é bastante simples, primeiro vamos fazer o Download do software Weka clicando aqui. Lembre-se de baixar o arquivo de acordo com sua versão de sistema operacional, depois é só clicar duas vezes e Next, Next… até terminar a instalação.

Sendo programado em Java, ele é compatível com a grande maioria das plataformas, mas nós precisamos ter instalado a Java Virtual Machine (JVM), que serve como intérprete entre Java e sistema operacional. Para fazer isso, vamos precisar do Java Runtime Environment (JRE), que inclui a JVM e abrange as nossas necessidades para esta finalidade. Geralmente a maioria dos erros de instalação se resolvem instalando a versão mais atualizada do java.

Weka Linux

Devemos, primeiramente, instalar o ambiente Java.

apt-get install openjdk-7-jre

Em determinadas distribuições, como o Ubuntu, o Weka pode ser instalado a partir dos repositórios. Basta pesquisar por “weka” no gerenciador de download de conteúdo. Embora seja uma maneira muito simples no Linux, esse método não garante que tenha a versão mais recente do programa.

Mineração de Dados Weka – Exemplo

Algoritmo de Classificação com uma das bases padrão do Weka:

 

Aqui foi utilizado um banco original mas percebemos pela matriz de confusão que o classificador estava errando mais a classe “yes” do que acertando;

Você pode testar outros algoritmos clicando na opção “Choose”, procure deixar as outras opções em padrão e a percentage split em 75%.

No exemplo que testei, o fato de mudar o algoritmo para J48 usando spliting data com 75% para traning e 25% para validation mudou os resultados. Geralmente resultados próximos de 100% ou grupos com percentuais divididos igualmente são os melhores.

Projeto Completo

Descrição do mini mundo:

Um banco de dados com situações que lentes de contato devem ser  recomendados ao paciente seguindo 3 situações principais:

  • Uso é fortemente recomendado
  • Levemente recomendado
  • Não é recomendado.

Essas três situações são interpretadas pelo programa como classes.

Vamos abordar 24 tipos diferentes de ocasiões que são distribuídas entre as classes da seguinte forma:

  • 4 casos para recomendar fortemente
  • 5 levemente
  • 15 sem recomendações.

Possuem no total 5 atributos, 4 características e 1 classe:

  • Idade do paciente: Jovem, Pré-presbiopia, Presbiopia.
  • Prescrição Médica: Míope ou Hipermetrope.
  • Astigmatismo: Sim ou Não.
  • Taxa de produção lacrimal: Reduzida ou Normal.
  • Lentes de contato: Leve, Forte ou Nenhuma.

É importante deixar claro que o exemplo é completo, correto e livre de ruídos. Os fatores não descrevem totalmente todos os fatos que afetam diretamente a decisão.

Primeira Interação

Utilizaremos as regras do classificador PART que gera uma lista de decisão utilizando a técnica “dividir pra conquistar”, constrói uma arvore de decisão em cada interação e pega a “melhor” folha em uma regra.

Os dados são divididos em 10 segmentos e serão feitas dez interações de treinamento e validação, em cada iteração são gerados novas formas de dados para validação restando ainda nove outras utilizadas para aprendizagem. Os primeiros dados extraídos do programa utilizando as configurações padrões.

PART decision list são as primeiras decisões retornadas após a aplicação do algoritmo de IA, pode-se levantar a hipótese de que quando a taxa de produção lacrimal é reduzida então o uso de lentes de contato não é recomendado.

Analisando a matriz de confusão (confusion matrix) percebe-se que o algoritmo obteve poucos erros, colocando o atributo “none” que é o caso de não usar lentes em ênfase, observamos que de quinze tentativas em confirmar essa premissa duas foram colocadas como “b” e uma em “a”, nesse ponto houve erro do agente artificial.

 

 

Enfatizando agora o atributo astigmatismo, houve um erro de classificação “1.0” além dos dois casos de confusão em “c”; ao todo o experimento obteve 4 erros de classificação em 24 tentativas o que gera um aproveitamento de mais de 83% . Uma analise gerada pela primeira execução de classificação sem filtros.

Segunda Interação

Numa segunda execução setando o valor de cross-validation em 2 tivemos cinco erros de classificação, porém em 3 e 4 tivemos apenas três erros. Testando os outros valores de 1 até 10 tiveram o mesmo comportamento.

Use training set

Esta opção apenas treina o agente gerando um numero muito menor de erros, porém o ambiente virtual de interação seria um modelo perfeito deixando o algoritmo “viciado” pelo fato de não ocorrer mudanças nos padrões, caso aja insistência nos testes por um longo período pode acontecer da taxa de erros ser zerada. Neste experimento ocorreram apenas dois erros de classificação, porém a matriz de confusão não demonstrou erro algum.

Percentage Split

Separar dados para treinamento. Esta opção permite a escolha de um percentual de dados que será executado e outro que ficara em treinamento os quais não serão executados, diferente do cross-validation que treina e executa ao mesmo tempo. Nesta base de dados a grande maioria de testes realizados com esta opção geraram mais erros do que acertos o que é bastante normal. Um fato curioso identificado nos testes é que ao colocar 73% ou mais dos dados em treinamento não houve ocorrência de erros de classificação, porém abaixo disso a incidência é muito grande. Isto é importante para saber como o agente inteligente age sem adaptação.

Decision Stump

É uma maquina de aprendizado com o algoritmo de arvore de decisão simples, possui um nó interno (a raiz), que está imediatamente ligado aos nós terminais (as folhas), faz uma previsão com base no valor de apenas uma característica única de entrada. Diferente do PART não se preocupa com a “melhor folha”. Dependendo do tipo da função de entrada diversas variações são possíveis.

Basicamente a diferença entre os resultados do decision stump para o PART são a forma como os algoritmos são implementados internamente, classificação (distribuição mais detalhada) e a quantidade de erros de classificação. Os mesmos testes que foram aplicados ao PART também foram feitos no decision.

Exclusão de atributos.

Pode-se excluir um ou mais atributos e até mesmo combina-los para analisar qual deles esta interferindo mais na classificação dos outros. No caso do PART deve-se tomar cuidado para não excluir o atributo principal que no nosso caso são as lentes de contato (leve, forte ou nenhuma).

Conclusões

Embora as maiores incidências de erros tenham ocorrido ao classificar o não uso de lentes de contato, este fora o resultado da maioria dos testes para patologias, idade e produção lacrimal.

Quanto mais informações relacionadas, mais variáveis direcionadas ao treinamento e mais testes envolvendo tipos de algoritmos, pode-se obter resultados melhores com menos erros de classificação.

Por fim neste trabalho abordamos uma pesquisa sobre a preferência e recomendação do uso ou não de lentes de contato utilizando uma base de dados do software WEKA. As discussões acerca das analises foram fundamentais para a elaboração deste artigo, conseguindo que o objetivo que é o leve aprendizado da ferramenta tenha sido alcançado.

             

SEO

SEO o que é?

Search Engine Optimization (SEO) é um conjunto de medidas tomadas para aumentar a referência em mecanismos de busca ou diretórios (JERKOVIC, 2010).

A otimização se inicia a partir do momento em que o propósito do website é definido pelo seu criador que deverá dar importância a elementos essenciais da SEO, como (1) a construção de links internos, (2) as palavras-chave relevantes ao tema, (3) como elas se encaixam nestes links e em outros objetos do site, (4) a relevância do conteúdo, (5) fatores técnicos que envolvem nomeação interna de imagens, (6) termos utilizados em meta descrição que descrevem o conteúdo da página do HTML, e por fim (7) a junção deles com o título do conteúdo em questão e nome da página (ou sub-pagina) do domínio específico que é o principal elemento de estudo neste presente trabalho.

O que significa SEO?

Search Engine Optimization é todo o trabalho necessário para produzir um alto volume de referência provindas de mecanismos de busca a fim de gerar reconhecimento de um Website é um dos fatores que fazem com que empresas invistam em SEO atualmente. Para que este trabalho seja bem feito é preciso separar e analisar cada elemento interno e externo do Site para que se adeque tanto a boa experiência do usuário quanto aos padrões determinados pela W3C.

WordPress SEO Tutorial

Trabalhar com SEO no WordPress é simples, existem vários Plugins que resolvem o problema. Recomendo fortemente o plugin Yoast SEO.

Yoast SEO (anteriormente conhecido como WordPress SEO) é o mais completo SEO plugin que existe hoje para usuários WP . Ele incorpora tudo, desde um editor de snippet a uma funcionalidade de análise de página em tempo real que ajuda você a otimizar o conteúdo de suas páginas, títulos de imagens, descrições meta e muito mais para sitemaps XML e muitas opções de otimização.

Como Programar em C

Instalar Dev-C++

Antes de tudo, é importante lembrar que a programação exige lógica, para criar possíveis soluções para problemas, caso você não tenha nenhuma experiência com nenhuma linguagem de programação, não se preocupe, pois esse tutorial está voltado para todo tipo de pessoas, vamos começar de maneira bem light até alcançarmos um nível mais avançado.

Para que o programa em C seja executado, é necessário que ele seja compilado, o processo de compilação faz com que o código que você digitou seja traduzido para um código de máquina, onde ele será executado. Durante nossos tutoriais vamos utilizar o Dev C++, que é um compilador de C e C++, você pode fazer o download aqui.

Após instalar o Dev C++, abra para dar inicio ao nosso primeiro programa, aconselho a criar uma pasta para organizar os tutoriais. Primeiro temos que criar o nosso projeto, vá em “File” -> “New” -> “Project”.

Agora selecione “Console Application” e “C Project”, coloque “Aula1” como nome do projeto.

Pronto, ele vai gerar automaticamente os códigos básicos para que seu programa seja executado, vamos entender para que serva cada um deles, vou comentar o código, passo a passo.

#include <stdio.h>
#include <stdlib.h>
//este comando está adicionando as biblioteca ao nosso programa,
//depois vamos descobrir para o que serve de fato

int main(int argc, char *argv[]){ 
//Essa é a função "main", serve basicamente para iniciar nosso programa
    system("PAUSE"); //este comando vai dar uma pausa na execução do código
    return 0; 
}

Neste primeiro tutorial, vamos fazer o clássico “olá mundo”, para imprimir na tela a frase clássica, vamos usar o comando “printf”, que funciona da seguinte maneira:

printf("Ola mundo!");

seu código ficará assim:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]){
    printf("Ola mundo!");
    system("PAUSE");
    return 0;
}

Agora aperte F9 para que seu código seja compilado e executado, caso haja algum erro, o compilador avisará sobre o erro, é importante saber que o C é uma linguagem “case sensitive” ou seja, ele diferencia as letras maiúsculas das minusculas, por isso tome cuidado, é bom utilizar sempre letras minusculas.

O seu codigo será executado em console (aquela telinha do prompt de comando) e aparecerá assim:

Variável

Variável tem a função de armazenar dados na memoria durante a execução do programa, vale lembrar que todos os dados armazenados em variáveis são apagados quando o programa é encerrado.
ela pode armazenar: letras e números de acordo com seu tipo.

Tipos primitivos

int: armazena números do tipo inteiro.
float: armazena números decimais
char: armazena 1 caractere
Existem outros tipos primitivos, mas por enquanto vamos utilizar apenas nesses.

Printf

O Printf é um comando utilizado para imprimir algo na tela, seja dados de variáveis ou qualquer mensagem.

Scanf

O Scanf é um comando utilizado para ler um dado do teclado e armazena-lo em alguma variável.

Operadores matemáticos

como o próprio nome já diz, eles servem para fazer operações matemáticas.
+: realiza somas
-: realiza subtrações
/: realiza divisões
*: realiza multiplicações

Programando

Neste tutorial vamos fazer um programinha simples que lê dois números do teclado, e imprime na tela a media dos valores, para isso vamos utilizar o comando scanf para armazenar os dados lidos em variáveis, em seguida vamos descobrir a média e imprimir na tela usando o printf.

Crie outro projeto no DevC++, da mesma maneira que fez no anterior, e comece a escrever o código dentro do “main”.

1) primeiro temos que declarar quais variáveis vamos utilizar e qual o tipo delas, para isso escreva logo abaixo do “main”:

int numero1;
//essa variavel vai armazenar o primeiro número, ele será do tipo inteiro
int numero2;
//Essa variável vai armazenar o segundo número, ele será do tipo inteiro
float media;
//Essa variável vai armazenar a media dos numeros, ele será do tipo float (decimal)

2) agora vamos escrever as “ordens” na tela:

printf("digite um numero: \n");
O "\n" foi utilizado para pular a linha

3) agora vamos armazenar na variável “numero1” o valor digitado:

scanf("%i", &numero1);

Esse comando significa dizer que, vamos receber um valor inteiro “%i” e armazena-lo na variável numero1.

4) agora vamos escrever de novo outra orden na tela com o printf e receber outro número, com o scanf, seu código ficará assim:

int numero1;
int numero2;
float media;
printf("digite um numero: \n";
scanf("%i", &numero1);
printf("digite outro numero: \n";
scanf("%i", &numero2);

5) agora vamos calcular a media e imprimir na tela:

media = (numero1 + numero2)/2;

Isso quer dizer que a variável media vai receber a soma do numero1 com o numero2, dividido por 2

printf("a media deu: %f", media);

Este comando vai imprimir na tela a frase “a media deu: (valor da media)”, o %f serve para dizer qual tipo de variavel será impressa e onde aparecerá, neste caso, o valor da variável aparecerá no final da frase. Note que “media” não aparece com “&” quando está no printf, isso porque no caso do printf ele não vai armazenar nada, vai apenas exibir.

6) seu programa será executado desta maneira:

Como utilizar o IF

O if é um comando que só é executado, se a condição for verdadeira, “if” significa “se” em inglês, veja o exemplo:

if (condição){
//aqui fica os comandos que serão executados, se a condição for verdadeira
}

Agora vamos supor que eu tenho uma variável do tipo inteiro, chamada “senha”, e só quero que a mensagem “você digitou a senha correta” apareça se a senha for correta, neste caso a senha será 12345, e o usuário terá que digitar uma senha, confira o exemplo:

int senha;
printf("digite a senha:");
scanf("%i", &senha);
if(senha==12345){
    printf("voce digitou a senha correta");
}

No meu código, o usuário vai digitar uma senha e meu programa vai conferir, SE(if) a SENHA(senha) for IGUAL(==) a 12345 então vai aparecer a mensagem, se a senha não for igual, o programa não vai fazer nada.
Lembre-se: em C, “==” é um operador lógico que significa “=”, se você utilizar apenas o “=” você estará atribuindo um valor, vamos ver isso mais na frente.

ELSE

Agora que sabemos como utilizar o IF, vamos aprender a utilizar o ELSE (senão, em inglês).
No caso do ELSE, o código só será executado se o IF for falso, veja esse exemplo:

int senha;
printf("digite a senha:");
scanf("%i", &senha);
if(senha==12345){
    printf("voce digitou uma senha correta");
}
else{
    printf("senha incorreta");
}

Neste caso, se a senha digitada for igual a 12345 vai aparecer a mensagem: “voce digitou a senha correta” se a senha não for igual a 12345 vai aparecer a mensagem: “senha incorreta“.

ELSE IF

ELSE IF é parecido como o IF, na verdade é um outro IF, o ELSE IF só é executado se a condição do IF não for verdadeira e a sua condição for verdadeira, veja o exemplo:

int senha;
printf("digite a senha:");
scanf("%i", &senha);
if(senha==12345){
    printf("voce digitou a senha correta");
}
else if(senha==111111){
    printf("voce digitou a senha correta");
}
else{
printf("senha incorreta");
}

 

Neste caso, o programa vai receber uma senha, comparar ela e se ela for igual a 12345 vai aparecer a mensagem: “voce digitou a senha correta“, se a senha não for igual a 12345 ele vai executar o ELSE IF e a for igual a 111111 vai aparecer a mensagem: “voce digitou a senha correta“, e se a senha não for igual a nenhum do dois, aparecerá a mensagem: “senha incorreta“.
OBS: O ELSE IF pode ser usado infinitas vezes, por exemplo: você poder fazer uma comparação com todas as senhas que podem ser aceitas.

OPERADORES LÓGICOS

Operador lógico é uma classe de operação sobre variáveis ou elementos, que retornam um valor falso ou verdadeiro, eles são: && (significa E), || (significa OU) e == (significa IGUAL)
No nosso exemplo a cima, nós aceitamos as senhas 12345 e 111111, utilizamos dois ifs para verificar, mas podiamos fazer com apenas um, veja o exemplo:

int senha;
printf("digite a senha:");
scanf("%i", &senha);
if(senha==12345 || senha==111111){
    printf("voce digitou a senha correta");
}
else{
    printf("senha incorreta");
}

Isso quer dizer que, o programa vai receber uma senha e quando a senha for igual a 12345 ou 111111 ele vai exibir a mensagem: “voce digitou a senha correta“, neste caso nós utilizamos duas condições em um mesmo IF, mas podemos utilizar quantas for necessário.

Agora vamos fazer outro exemplo, utilizando o && (E):

int senha1;
int senha2;
printf("digite a senha1:");
scanf("%i", &senha1);
printf("digite a senha2:");
scanf("%i", &senha2);
if(senha1==12345 && senha2==111111){
    printf("voce digitou as senhas corretas");
}
else{
    printf("senhas incorretas");
}

Neste caso, o usuário digitou duas senhas, e comparamos se as duas são verdadeiras, se as duas senhas digitadas forem verdadeiras, aparecerá a mensagem: “voce digitou as senhas corretas“, caso contrário, aparecerá a mensagem: “senhas incorretas

Seu programa será executado desta maneira:

 

FOR

“FOR” significa “para” em português, o FOR é uma estrutura de repetição usada quando queremos executar um “bloco de código” determinada vezes. Por exemplo, eu quero imprimir 20 vezes na tela “curso de C”, neste caso faremos o seguinte:

int n;
for(n=0;n<20;n=n+1){
    printf("curso de C n");
}

Todo “for” precisa de uma variável de controle, no nosso exemplo, “n” foi a variável de controle, note que ela foi declarada em cima como sendo do tipo inteiro, quando o programa executou pela primeira vez o “for” ele atribuiu o valor 0 a variável “n”, executou o código e depois somou +1 ao valor de “n”, na segunda execução, “n” tinha o valor 1, depois o código foi executado novamente e o valor de “n” foi aumentado denovo, desta vez ficando com o valor 2, e assim o programa será executado até que o valor de “n” seja menor que 20, ou seja, a nossa condição de parada é que o valor de “n” seja menor que 20, neste exemplo o código será executado 20 vezes.

 

WHILE

“WHILE” significa “ENQUANTO”, ou seja, ele vai executar um bloco de códigos enquanto a condição de parada for verdadeira.
Por exemplo, vamos fazer um programa que vai ler e exibir os números lidos, o programa só vai parar quando o usuário digitar “0”.

int n;
printf("digite 0 para sair n");
while(n!=0){
    printf("digite um numero n");
    scanf("%i",&n);
    printf("voce digitou %i" n, n);
}

Note que o programa só parou de ser executar o bloco de códigos quando o usuário digitou 0, agora é importante lembrar que o “enquanto”, verifica antes se a condição é verdadeira, para só depois poder executar, como não havia valor em “n”, então “n” seria diferente de 0, agora se a gente tivesse atribuído o valor 0 a “n” antes do “enquanto”, o bloco de códigos do “enquanto” não seria executado, porque “n” seria igual a 0.

 

DO…WHILE

“DO…WHILE” significa “Faça…enquanto”, diferente do “while”, o “do…while” executa o bloco de códigos pelos menos uma vez, e só depois verifica se a condição de parada é verdadeira ou não.

int n;
do{
    printf("Voce entendeu como funciona o DO...WHILE? n");
    printf("0 = sim / 1 = nao n");
    scanf("%i",&n);
    if(n==0){
        printf("Parabens! n");
    } else{
        printf("Esta entendendo agora? n");
    }
}while(n!=0);

Sempre que o DO…WHILE for usado, o bloco de códigos será executado pelo menos uma vez, neste caso nosso programa perguntou, depois conferiu se a resposta foi “sim” ou “não”, se ela foi “sim” então o programa para de executar, se ela foi “não” o programa vai ser repetido.

Neste tutorial vamos aprender como criar e utilizar os arrays.

Antes de aprender o que é um array, vamos pensar na seguinte situação, eu tenho anotado no caderno uma lista com 50 números de telefone e quero passar todos para meu programa em C, se a gente fosse fazer isso com o que aprendemos, teriamos que criar 50 variáveis e preencher todas, dava pra fazer, mas seria um pouco trabalhoso.

Há uma maneira MUITO mais eficiente para fazer isso, é usando um arrays.

ARRAY

O Array, também conhecido como vector, é básicamente um “conjunto” de váriaveis do mesmo tipo, agrupadas de forma sequencial como se fosse uma “fila”, e ordenado por um indice. É através do indice que acessamos nossa “variavel”.

A declaração do array é feita deste jeito:

(tipo do array) (nome do array)[(quantidade de posições do array)]

Exemplo:

int guiky[10];

Isso quer dizer que eu estou criando um array chamado guiky, que vai armazenar 10 números inteiros. Se preferir também é possível criar um array já com valores, exemplo:

int guiky[10] = {7,8,4,6,9,10,5,1,2,3};

“Fisicamente” ficaria algo assim:

Preenchendo um array

Você vai preencher o array do mesmo jeito que preenche uma variável, é só adicionar o valor na posição do array que você queira receber o valor.

guiky[5]=4350;

isso quer dizer que o valor 4350 vai ser inserido na sexta posição do array (isso mesmo, na sexta posição, porque a primeira posição do array é o indice 0).
Agora vamos voltar ao exemplo dado no começo do tutorial, como vamos armazenar 50 números dentro de um array? temos que atribuir um por um? a resposta é “mais ou menos”, na verdade os valores vão ser inseridos 50 vezes pelo usuário do programa (afinal de contas o programa não vai adivinha o número das pessoas), mas você programador vai digitar quase nada, apenas um “FOR” e uma variavel para trocar o indice, veja como vai ficar:

int i;
int numeros[50];
for(i=0;i<50;i++){
    printf("Digite o numero do telefone: n");
    scanf("%i", &numeros[i]);
}

Veja com apenas essas linhas o programa vai armazenar tudo, isso porque o for vai repetir esse código 50 vezes, o “i” será a variável de controle que vai corresponder a posição do array que será inserido o número. Repare que na primeira vez que o loop for executado, “i” terá o valor 0, e vai adicionar no indice “0”, depois vai ter o valor “1” e vai adicionar no indice “1”, assim até chegar ao ultimo loop, quando “i” terá o valor 49, e adicionará na posição de indice 49.

LEMBRE-SE: O array tem uma quantidade fixa de posições, cuidado para o “for” não tentar adicionar numa posição que não existe.

E como a gente faz pra exibir todos os números do meu array? veja como é simples:

int i;
int numeros[50];
for(i=0;i<50;i++){
    printf("Digite o numero do telefone: n");
    scanf("%i", &numeros[i]);
}
for(i=0;i<50;i++){
    printf("%i n", numeros[i]);
}

O “for” vai passar por todas as posições e vai imprimir na tela todas elas.

Como trocar as posições do array?

Caso eu queira trocar as posições, como faz? neste caso você tem que saber qual posição quer trocar, por exemplo, quero trocar a posição 20 pela 30, neste caso, vamos utilizar uma variável auxiliar para que o valor não seja perdido no momento da troca, ficaria assim:

int i, aux;
int numeros[50];
for(i=0;i<50;i++){
    printf("Digite o numero do telefone: n");
    scanf("%i", &numeros[i]);
}
aux = numeros[20];
numeros[20] = numeros[30];
numeros[30] = aux;

A variável “aux” foi usada para armazenar temporariamente o valor da posição 20, para que ele não seja perdido durante a troca.

Como ordenar o array em números crescente?

há diversas maneiras para ordenar um array, umas eficientes e outras nem tanto, a que vamos aprender aqui é uma das mas simples, ela vai pegar um número do array e comparar com todos os outros números, se ele for maior que o da posição seguinte, ele vai trocar de posição, até que todos os números maiores fiquem no fim do array e os menores fiquem na frente, fazendo assim a ordenação ordem crescente, o algoritimo de ordenação ficaria assim:

for(i=0;i<10;i++){
    for(j=i+1;j<10;j++){
        if(numeros[i]>numeros[j]){
            aux=numeros[i];
            numeros[i]=numeros[j];
            numeros[j]=aux;
        }
    }
}

Para ordenar de maneira decrescente, basta inverter a comparação, fazendo com que se o primeiro número for menor que o segundo, ele seja trocado e assim sucessivamente.
Criamos um algoritmo para vocês entederem melhor, confira:

//declarando as variáveis
int numeros[10];
int aux;
int i;
int j;

//recebendo todos os números
for(i=0;i<10;i++){
    printf("Digite um numero n");
    scanf("%i", &numeros[i]);
}

//mostrando como ficou o array
printf("Array desordenado: ");
for(i=0;i<10;i++){
    printf("%i ", numeros[i]);
}

//ordenando
for(i=0;i<10;i++){
     for(j=i+1;j<10;j++){          
          if(numeros[i]>numeros[j]){
             aux=numeros[i];
             numeros[i]=numeros[j];
             numeros[j]=aux;
          }
     }
}

//mostrando o array ordenado
printf("nArray ordenado: ");
for(i=0;i<10;i++){
    printf("%i ", numeros[i]);
}
printf("n");