Posts com Tag ‘C’

h1

Para programadores iniciantes

Setembro 29, 2009

Estava numa boa quando ouvi muitas pessoas reclamarem de várias coisas referente a programação. Aqui vai um texto super recomendado para quem quer ser programador:  “Como ser um programador” por Rodrigo Strauss no site 1bit.

Normalmente quem começa a programar estudando num curso técnico ou numa faculdade começa com uma linguagem como C/C++ ou Pascal. Logo torcem a cara e falam que essas coisas são inúteis. Eles querem aprender Java ou C#. Nenhum que faz esses comentários nunca ouviu falar de Python, Lua, Ruby… querem fazer algo famoso e com janelas e botões, não essas cosias sem graça na console, o que eles chamam de “tela preta”.

Você está aprendendo C/C++ ou Pascal por um motivo simples: antes de aprender a fazer coisas complexas deve aprender primeiro o que faz um programa, como é um programa, como você deve pensar para programar, como funciona o “pensamento do computador”…

É claro que dá para fazer coisas além daquela “tela preta”. Não falo nada de Pascal por que nunca o usei, mas existe o Delphi que podemos dizer que é o “pascal visual”. Agora C/C++… sabia que o Windows tem quase toda sua maioria feita em C? Sabia que o Linux também? Sabia que os melhores jogos são feitos em C/C++? Não todos os melhores, é claro. Também se usam o C# ou Lua e Java.

Leia o texto que eu indiquei. Se esforce, não seja cabeça fechada.

h1

Comandos break e continue

Agosto 18, 2009

Bom, vamos começar a adiantar as coisas… não sei quando, mas vamos começar. Já peguei o cd da MSDN AA pra instalar o Windows no meu note, que teve que ser formatado… logo, espero, eu volto a postar sobre XNA.

Bem, hoje vamos falar sobre uns comandinhos legais: break e continue.

BREAK

O comando break para um laço de repetição. Bem, pelo menos é isso que vamos ver hoje. Ele para sem dó nem piedade.

Exemplo:

#include <iostream.h>

void main ()

{

int x,i;

for(x=1;x<=100;x++)

{

cout<<x<<endl;

}

for (i=1; i<=100; i++)

{

cout<<i<<endl;

if(i=50)

{

break;

}

}

}

O que acontece a cima?

Primeiro FOR imprime na tela os números de 1 a 100. O segundo FOR vai imprimir de 1 a 50. Por que ele para? O BREAK mandou parar o laço. Num programa maior quando chega no BREAK o programa pula para a próxima linha do programa.

CONTINUE

Agora o continue é um pouquinho parecido. Ao invés de parar o laço e pular fora, indo pro próximo comando, o continue manda continuar o laço ignorando a linha depois deste.

Exemplo:

#include <iostream.h>
void main ()
{

int x,i;

for(x=1;x<=100;x++)

{

cout<<x<<endl;

}

for (i=1; i<=100; i++)

{

if(i=50)

{

continue;

}

cout<<i<<endl;

}

}

Nesse exemplo o programa roda o FOR, mas quando chega no CONTINUE, quando o valor de i for 50, ele ignora o COUT e não imprime o valor de i, porém, só naquela vez. Depois retorna ao laço, normalmente.

Bom, é isso.. não sei se fui muito clara… é que estou sem inspiração XD preciso voltar a postar.

Até mais

h1

Operadores aritméticos

Agosto 16, 2009

Não falamos muito sobre os operadores aritméticos, né?

Se você lembra que aritmética é um campo de estudo da matemática você deve imaginar do que estamos falando.

As operações em C/C++ (e em C# também) são:

+ adição

- subtração

* multiplicação

/ divição

% módulo

Bom, soma e subtração já usamos, né? Multiplicação e divisão são sinais diferentes dos que já conhecemos, mas tudo bem, né?

E o módulo?

Módulo é o resto de uma divisão. Pra que usar isso?

Bom, se você precisar de uma aplicação que verifique se o número é par você pode usar:

resto=numero%2;

if(resto == 0)

{

cout<<”Numero eh par”;

}

else

{

cout<<”Numero impar”;

}

Muito bem, se você sabe o que é um número par sabe que quando dividimos ele por 2 o resto é 0. Quando o resto é 1 ele é impar. Quando o resto não for nem 0 e nem 1? Bom… se você atribuiu essas variáveis como inteiras isso não pode acontecer… se acontecer você conseguiu uma coisa incrível, meu caro!

Eu sei que deveria ter feito esse post antes… mas eu tinha esquecido dele. Sinto muito. Qualquer sugestão…

h1

Diferenças: = e ==

Agosto 16, 2009

As vezes até mesmo os mestres fazem coisas erradas… descuido… e nós mortais também nos descuidamos. Um dia um programa não estava rodando direito, e quando eu fui ver era um problema simples: um if estava usando somente um sinal de “igual” (=).

Qual a diferença?

Bem, de um modo simples você usa o sinal de = quando vai atribuir um valor (ou outra coisa) a uma variável, ou objeto, ou ao estanciar algo. Sinais de == juntos é verificação. Juntos significam “igual a”.

Tanto é que o sinal = é um operador de atribuição, ele atribui um valor. Os == se chama operador relacional. Quando usar cada um?

Você usa = quando vai atribuir um valor. Dãa. Por exemplo:

int x;

x = 4;

int u;

u = x;

Você usa == quando quer… verificar se algo é igual a outra coisa. Exemplo:

int x, u;

x = 4;

u = 5;

if ( x == u)

{

cout<<”Eles são iguais”;

}

Se você usar = num if vai dar erro de compilação. Apesar que um dia a muito tempo aconteceu o milagre de não dar erro. Digo, eu deixei um = só no if, e na hora que o programa chegava na linha do if ele atribuía um tal valor a variável ao invés de verificar se eram iguais. Nunca mais isso aconteceu comigo. Mágica. Do mesmo jeito, não façam isso em casa. E nem no trabalho.

h1

Projeto XNAF: colocar imagens do nosso jogo em XNA

Julho 5, 2009

Olá
Vamos continuar com o joguinho de torre de Hanói usando XNA? Lembra, é o nosso projeto, meu e seu, leitor imaginário. XD
Lembrando que vamos começar por baixo, fazendo coisas simples e depois aumentando a dificuldade.

Bom, primeiro vamos pegar essas imagens ai e salva-las, e é bom deixar com o mesmo nome que eu dei. Só para ajudar.

barra

barra

disco_1

disco_1

disco_2

disco_2

disco_3

disco_3

Bom, salvaram elas? Agora abra o Visual Studio ou o Visual C# Express. Abra o projeto da torre de Hanói. Você pode ir por File>>Open>>Project/Solution e escolher o arquivo dentro da pasta torre de Hanói com o nome de Game1.cs

Ou você clica no nome do projeto na abinha de Recents Project.

Bom, vá à abinha da Solution Explore, que é onde mostrar todos os componentes (arquivos) do projeto. Se ela não estiver visível vá ao menu View>>Solution Explore. Ou dê Ctrl+Alt+L.

Bom, Tá vendo onde está escrito Content? Clique sobre ele (para selecionar) e depois clique com o botão direito e escolha add e crie uma pasta. A pasta deve ter o nome de Sprites. Sprites? Ah pai, a tia MayogaX explica depois. Enfim:

Solution Explore

Solution Explore

Agora clique com o botão direito na pasta criada e escolha add>>existing item e ai escolha as imagens. Uma de cada vez.

Bom, primeiro tenho que contar uma coisa: como testar seu jogo. É claro que por enquanto não tem nada, mas só para você já ficar sabendo, olhe a imagem abaixo:

obotão player

Ta vendo o botãozinho verde? Se você clicar nele pode ver como está ficando o sue jogo. Ou seja, por enquanto uma tela azul. Vamos trocar a cor dele primeiro?

Vá onde tem o código:  protected override void Draw(GameTime gameTime){

Vá na linha depois e onde tem escrito a cor de tonalidade azul escreva White:

GraphicsDevice.Clear(Color.White);

É importante que escreva White com ‘w’ maisculo. Em C# há distinção de letras maisculas de minusculas.

Agora clique no botãozinho verde que eu acabei de falar. A tela tá branca, né? Por enquanto, por enquanto, vamos deixa-lá assim.

Bom, poderiamos criar jeitos muito imaginários para controlar as imagens… por enquanto vamos fazer do metodo mais simples, certo?

Agora vamos criar a váriavel  que chama a imagem e a variavel que diz em que posição da tela cada coisa vai ficar. A começar com a barra. Pense comigo: por que variavel a posição na tela? Oras os discos vão ter que se mover, né?

Vá na classe publica Game1 e escreva logo depois de onde está escrito:

public class Game1 : Microsoft.Xna.Framework.Game

{

GraphicsDeviceManager graphics;

SpriteBatch spriteBatch;

Ai escreva:

Texture2D barra1;

Vector2 barra1posicao = Vector2.Zero;

Texture2D barra2;

Vector2 barra2posicao = Vector2.Zero;

Texture2D barra3;

Vector2 barra3posicao = Vector2.Zero;

NOTA IMPORTANTE: Onde é letra maiscula deve ser maiscula e minuscula deve ser minuscula. Espaços devem ser respeitado. Depois falamos mais sobre isso, mas como eu já disse letras maisculas e minusculas são diferentes em C#.

Bom, percebeu que eu criei 3 barras? Ué, no jogo não são 3 barras? Ai você pergunta por que temos só um desenho de barra e eu respondo: não podemos copiar todas as barras?

Criamos as variaveis de textura e as variáveis de vetor. As variáveis de vetor são para colocarmos as possições nas barras.

Agora vamos dizer qual imagem de cada um e qual a possição.

Vá em  protected override void LoadContent()

E escreva logo depois do segundo cometário:

// TODO: use this.Content to load your game content here

barra1 = Content.Load<Texture2D>(“Sprites\\barra”);

barra2 = Content.Load<Texture2D>(“Sprites\\barra”);

barra3 = Content.Load<Texture2D>(“Sprites\\barra”);

Bom, já criamos as variáveis e já dizemos que cada uma delas é a imagem da barra. É isso que diz essas linhas.

barra1 é o nome da variável. Content.Load diz que dentro da variável vai caber tal conteúdo que deve ser carregado. <Texture2D> diz que é 2d. E depois o arquivo que deve ser carregado.

Bom, agora precisamos mandar desenhar as barras. Onde tiver o código:

protected override void Draw(GameTime gameTime)

{

GraphicsDevice.Clear(Color.White);

// TODO: Add your drawing code here

Escreva logo depois:

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

spriteBatch.Draw(barra1, barra1posicao, Color.White);

spriteBatch.End();

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

spriteBatch.Draw(barra2, barra2posicao, Color.White);

spriteBatch.End();

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

spriteBatch.Draw(barra3, barra3posicao, Color.White);

spriteBatch.End();

Dê o play, Macaco! Digo… ahn… teste o joguinho (dica: apertar F5 é a mesma coisa que clicar no botãozinho de play verde).

Você vê só uma barra, certo? Bem, estão as três, mas agente pôs como todas na mesma posição ZERO. Vamos mudar as posições?

Vá em protected override void Update(GameTime gameTime) e logo depois do comentário // TODO: Add your update logic here escreva:

barra1posicao = new Vector2(170.0f, 200.0f);

barra2posicao = new Vector2(370.0f, 200.0f);

barra3posicao = new Vector2(570.0f, 200.0f);

Teste o jogo agora. Bom, por hoje é só. Depois o resto e depois faremos leitura do mouse no jogo (esse jogo será rodado só em pcs).

Bom, até a próxima!

Olá
Vamos continuar com o joguinho de torre de Hanói usando XNA? Lembra, é o nosso projeto, meu e seu, leitor imaginário. XD
Lembrando que vamos começar por baixo, fazendo coisas simples e depois aumentando a dificuldade.

Bom, primeiro vamos pegar essas imagens ai e salva-las, e é bom deixar com o mesmo nome que eu dei. Só para ajudar.

barra

disco_1

disco_2

disco_3

Bom, salvaram elas? Agora abra o Visual Studio ou o Visual C# Express. Abra o projeto da torre de Hanói. Você pode ir por File>>Open>>Project/Solution e escolher o arquivo dentro da pasta torre de Hanói com o nome de Game1.cs

Ou você clica no nome do projeto na abinha de Recents Project.

Bom, vá à abinha da Solution Explore, que é onde mostrar todos os componentes (arquivos) do projeto. Se ela não estiver visível vá ao menu View>>Solution Explore. Ou dê Ctrl+Alt+L.

Bom, Tá vendo onde está escrito Content? Clique sobre ele (para selecionar) e depois clique com o botão direito e escolha add e crie uma pasta. A pasta deve ter o nome de Sprites. Sprites? Ah pai, a tia MayogaX explica depois. Enfim:

Agora clique com o botão direito na pasta criada e escolha add>>existing item e ai escolha as imagens. Uma de cada vez.

Bom, primeiro tenho que contar uma coisa: como testar seu jogo. É claro que por enquanto não tem nada, mas só para você já ficar sabendo, olhe a imagem abaixo:

Ta vendo o botãozinho verde? Se você clicar nele pode ver como está ficando o sue jogo. Ou seja, por enquanto uma tela azul. Vamos trocar a cor dele primeiro?

Vá onde tem o código:  protected override void Draw(GameTime gameTime){

Vá na linha depois e onde tem escrito a cor de tonalidade azul escreva White:

GraphicsDevice.Clear(Color.White);

É importante que escreva White com ‘w’ maisculo. Em C# há distinção de letras maisculas de minusculas.

Agora clique no botãozinho verde que eu acabei de falar. A tela tá branca, né? Por enquanto, por enquanto, vamos deixa-lá assim.

Bom, poderiamos criar jeitos muito imaginários para controlar as imagens… por enquanto vamos fazer do metodo mais simples, certo?

Agora vamos criar a váriavel  que chama a imagem e a variavel que diz em que posição da tela cada coisa vai ficar. A começar com a barra. Pense comigo: por que variavel a posição na tela? Oras os discos vão ter que se mover, né?

Vá na classe publica Game1 e escreva logo depois de onde está escrito:

public class Game1 : Microsoft.Xna.Framework.Game

{

GraphicsDeviceManager graphics;

SpriteBatch spriteBatch;

Ai escreva:

Texture2D barra1;

Vector2 barra1posicao = Vector2.Zero;

Texture2D barra2;

Vector2 barra2posicao = Vector2.Zero;

Texture2D barra3;

Vector2 barra3posicao = Vector2.Zero;

NOTA IMPORTANTE: Onde é letra maiscula deve ser maiscula e minuscula deve ser minuscula. Espaços devem ser respeitado. Depois falamos mais sobre isso, mas como eu já disse letras maisculas e minusculas são diferentes em C#.

Bom, percebeu que eu criei 3 barras? Ué, no jogo não são 3 barras? Ai você pergunta por que temos só um desenho de barra e eu respondo: não podemos copiar todas as barras?

Criamos as variaveis de textura e as variáveis de vetor. As variáveis de vetor são para colocarmos as possições nas barras.

Agora vamos dizer qual imagem de cada um e qual a possição.

Vá em  protected override void LoadContent()

E escreva logo depois do segundo cometário:

// TODO: use this.Content to load your game content here

barra1 = Content.Load<Texture2D>(“Sprites\\barra”);

barra2 = Content.Load<Texture2D>(“Sprites\\barra”);

barra3 = Content.Load<Texture2D>(“Sprites\\barra”);

Bom, já criamos as variáveis e já dizemos que cada uma delas é a imagem da barra. É isso que diz essas linhas.

barra1 é o nome da variável. Content.Load diz que dentro da variável vai caber tal conteúdo que deve ser carregado. <Texture2D> diz que é 2d. E depois o arquivo que deve ser carregado.

Bom, agora precisamos mandar desenhar as barras. Onde tiver o código:

protected override void Draw(GameTime gameTime)

{

GraphicsDevice.Clear(Color.White);

// TODO: Add your drawing code here

Escreva logo depois:

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

spriteBatch.Draw(barra1, barra1posicao, Color.White);

spriteBatch.End();

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

spriteBatch.Draw(barra2, barra2posicao, Color.White);

spriteBatch.End();

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);

spriteBatch.Draw(barra3, barra3posicao, Color.White);

spriteBatch.End();

Dê o play, Macaco! Digo… ahn… teste o joguinho (dica: apertar F5 é a mesma coisa que clicar no botãozinho de play verde).

Você vê só uma barra, certo? Bem, estão as três, mas agente pôs como todas na mesma posição ZERO. Vamos mudar as posições?

Vá em protected override void Update(GameTime gameTime) e logo depois do comentário // TODO: Add your update logic here escreva:

barra1posicao = new Vector2(170.0f, 200.0f);

barra2posicao = new Vector2(370.0f, 200.0f);

barra3posicao = new Vector2(570.0f, 200.0f);

Teste o jogo agora. Bom, por hoje é só. Depois o resto e depois faremos leitura do mouse no jogo (esse jogo será rodado só em pcs).

Bom, até a próxima!

h1

Variável do tipo char

Julho 5, 2009

Olá. Só falta falar de mais um tipo de variável antes de falar mais afundo sobre… sobre…elas? Bom adivinha qual faltava? Tipo char. Bom, string é outra… Mas…  Vamos dar um tempo.

Variável char

O tipo char é um tipo pequeno. Ele cabe muita pouca coisa. Ela cabe 8 bits. Para você entender o int cabe muitos números, certo? (vide o final do post sobre double e float) mas o tipo char só agüenta do -127 até o 128. Mas tem uma vantagem em relação ao tipo int: ela cabe letras! Bom, quase isso, nela cabem números da tabela ASCII. A Tabela ASCII é uma tabela em que cada número vale uma letra.  Para saber sobre a tabela ASCII tem um texto direto e simples aqui: http://equipe.nce.ufrj.br/adriano/c/apostila/tabascii.htm . Bom, cada número até 127 vale um sinal, letra, número, espaço… Também tem como conseguir uns desenhos… isso fica para a próxima. O importante é que você saiba como o tipo char encarar um caractere.

Quando você pede para a variável do tipo char guardar um certo número ela guarda um caractere só. Se você pedir para ela guardar o número 100 ela vai guardar o sinal referente ao 100 na tabela ASCII. Se você pedir para ela guardar um número superior aos números da tabela, ela vai guardar só um último digito e deixá-lo como número comum mesmo.

Não sei se alguém notou que quando escrevemos em C++ sempre precisamos escrever sem acentos ou na hora de rodar o programa você via uma coisa esquisita no lugar onde seria o acento. Alguém notou? Usando a tabela ASCII você pode por os acertos.

Bom, é isso.

Um exemplo esta no código do joguinho de adivinhação em while. (vide o post do joguinho aqui e o código dele aqui).

Você declara a variável normalmente

char alguma_coisa;

E depois o usa. Um exemplo é da pergunta se deseja continuar ou não:

cout<<”deseja continuar? Digite n ou s”<<endl;
cin>>alguma_coisa;
if((alguma_coisa==’n’) || (alguma_coisa==’N’))
{
cout<<”Obrigaod pela resposta”<<endl;
}

Assim o teste é feito para saber se a pessoa digitou um ‘n’ minúsculo ou maiúsculo.

Olhe atentamente o código do joguinho.

Tem uma parte que tem a variável char chamada asci, que recebe o valor de 198 e por isso ao rodar o programa aparece um caractere ‘a’ com o sinal de tio ‘~’. Sim, a tabela ASCII não vai só até o 127 no Brasil XD. Um dia eu falo sobre isso.

Bom, qualquer dúvida é só falar, okay?

h1

FAQ: O que são números de ponto flutuante, float e double?

Julho 2, 2009

Olá meus leitores queridos. Esta é a primeira semana de julho, e resolvi fazer um post mega sobre o que mais os meus leitores imaginários perguntaram. Como ninguém pergunta nada, só fala “legal”, então não tem o que eu responder. Porém eu pensei: vou fazer um post sobre o que as pessoas perguntam pro tio Google.

A maior dúvida parece ser sobre ponto flutuante, ou, números quebrados.

O que são números quebrados?

Bom, lembra da época da escola? Apesar de que… deixa pra lá. Enfim, e a professora explicou sobre números Q? Números Racionais? Os números racionais são os obtidos através de uma razão (para mais detalhes vai um site de ensino fundamental mesmo XD http://pessoal.sercomtel.com.br/matematica/fundam/fracoes/racionais.htm ). Uma razão é uma divisão. Pense comigo: 1,5 nada mais é que 3 dividido por 2. Normalmente nós escrevemos os números racionais com um número seguido de vírgula e depois outro número ou de uma fração. Uma fração pode se transformar nesse negocio de número seguido de vírgula com outro número depois (não vamos entrar em detalhes matemáticos). Existem cálculos para transformar um número assim>>1,5 em uma fração 3/2. E para transformar o 3/2 em 1,5 é só dividir o 3 por 2.

Bom, sabendo o que para seres normais são os números racionais podemos continuar nosso estudo.

Muita gente chama os números racionais de números quebradinhos, talvez porque eles são quebrados mesmo.

número quebrado, racional

número quebrado, racional

Bom, mas para o computador eles não são “números quebrados”.

Em computação chamamos os números quebrados de ponto flutuante ou vírgula flutuante.

NOTA: Agora eu só vou dar uma por cima. Por enquanto não vamos falar do cálculo de ponto flutuante, certo?

Esses números são definidos por uma Mantissa que multiplica 2 elevado a um certo expoente. Em um ambiente de 32 bits (provavelmente o seu) o ponto flutuante consiste num bit de sinal, 8 bites de expoente e uma mantissa de 23 bits. O bit de sinal é zero para números positivos e 1 para números negativos. Por que um número de sinal? Oras, esqueceu que existem números acima do zero e números abaixo do zero?  O campo expoente é 128 menos alguma coisa. Não se preocupe com isso, e lembre-se que esse número pode ser zero. O campo da mantissa é correspondente à parte fracionária do número Considera-se a mantissa entre o número 1 e 2 (existem infinitos aqui no mundo real).

Eu li um conteúdo legal feito por um professor da Universidade Católica de Brasília. Não sei se tenho autorização pra divulgá-lo… mas tava lá livre… na internet… Resolvi mostrar para vocês. Relaxem, o material é forte. Digo, muito bom e difícil pra quem é newbie como nós, meros mortais. Mas vale a pena dar uma olhada: http://www.ucb.br/prg/professores/gualeve/disciplinas/2006_1/ac1bcc/05_PtoFlutuante.pdf

Bom, voltando ao foco, você quer saber como declará-lo né?

Tem alguns tipos de ponto flutuante. Por hoje vamos falar do float e do double. O float é o que vamos costumar usar. Comporta valores desde 1.40239846e-46 até 3.40282347e+38. Muita coisa né? Lembre-se que o e-46 significa elevado a -46. Adivinha só o que significa e+38. Sim, além de comportar números quebradinhos ainda comporta números muito, mas muito grandes. Significa que se você quiser fazer contas com números grandes pode usar o float no lugar do int, e não só para números quebradinhos.

Um exemplo é que int cabe desde -2.147.483.647  até  2.147.483.648

Bom, o Double é quase igual, a diferença é que cabem muito mais números. Vai de 4.94065645841246544e-324  até  1.7976931348623157e+308. Nunca parei pra pensar como esse número é grande.

Mas por que então o float é mais usado que o Double se o double é maior? Essa é justamente a resposta: o Double é grande demais. Normalmente não precisamos de números tão grandes, e criar uma  variável dessas faz o programa ficar mais pesado e lento. Como estamos só fazendo coisas simples nem dá muita diferença, mas quando você for fazer um programa grande vai fazer diferença sim. É por isso que o float é mais usado que o double.

Existem variações desses tipos de variáveis, mas fica pra outro dia.

Bem, agora considerações importantes: quando você cria uma variável int ela sempre vai mostrar números inteiros, e nunca números quebrados. Se você fizer um programa que divida 1 por 3 e o resultado for colocado em uma variável inteira você terá o resultado 1. A parte decimal é ignorada. Se você pegar essa variável resultado e dividir por 2 o resultado via ser 0. Sempre é ignorada a parte decimal.

Porém se você cria uma variável de ponto flutuante você pode mostrar tantos números inteiros como números decimais.

Contas são realizadas normalmente.

Bom, alguma dúvida é só falar. Ainda sinto que não respondi a todas as perguntas dos leitores imaginários pára-quedistas do Google.

h1

Laço de Repetição FOR

Julho 1, 2009

Me toquei que nem expliquei duas coisas: laço de repetição For e aquele código do joguinho de while. Preciso fazer isso, né?

Muito bem, vamos começar com o For agora.

O que é For?

For é um tipo de laço de repetição. Tem quem o chame de laço contado pois você sabe quantas vezes ele vai se repetir. Tem quem chame de laço de newbie. Por isso eu quis passar sobre ele por último, pois te muita gente que quando aprende não quer fazer outra coisa, e até se complica depois por causa das limitações do for quando vai aprender outra coisa.

Eu mesmo, até entrar no último semestre do curso técnico só usava for por que era, pra um newbie, mais fácil. Ao dar aula pra minha aluninha (não vou citar nomes mas um beijo pra ela) eu percebi que realmente é um problema de newbie achar que o for é a solução de todos os problemas >< E como este blog é voltado pra newbies resolvi falar do for por último, pra ninguém se apegar a ele.

Bom o Laço For é utilizado quando sabemos previamente quantas vezes o laço vai rodar.

EXEMPLO: quero que um programa pergunte a idade de 40 alunos. Nesse caso se usa For na boa.

Bom o For tem uma estrutura simples: você precisa dizer o valor inicial de uma variável, o valor final e a cada vez que o laço rodar o que vai mudar na variável.

EXEMPLO:

int idade, contador, soma, media;

soma=0;

for (contador=1; contador<=40; contador=contador+1)

{

cout<<”Qual a idade do aluno <<contador<<” ?”<<endl;

cin>>idade;

soma=soma+idade;

}

media=soma/40;

cout<<”A media das idades e de  “<<media<<end;

Bom, o que o programa faz? Ele começa criando as variáveis idade, contador, soma e media, e depois atribui o valor de 0 (zero) a variável soma. Ai ela entra no for. Ao entrar no for o programa entende que a variável contador é que é responsável pelo controle de quantas vezes o laço vai rodar. O contador começa no um (1). Ai entra um ponto-e-virgula (;). O ponto-e-virgula serve para mostrar  ao programa que a instrução de começar o contador no um (1) acabou. Ai vem a instrução que indica até quando o laço for vai rodar. Ele vai rodar até o numero 40. Quando o contador chegar ao numero 40 ele vai parar. Ai outro ponto-e-virgula que indica que a instrução acabou e ai vem a instrução que indica que a cada vez que o for rodar vai ser acrescentando 1 ao valor anterior do contador.

O for precisa ser indicado dessa maneira pra funcionar.

Dentro do for é perguntado a idade do aluno, acrescentado a idade a variável soma e fora do laço for é feita  a conta da média e dita pro usuário.

O importante é lembrar do que vai dentro do laço e o que não vai.

Soma vai dentro do laço por que ela começa com zero e a cada vez que entrar uma altura diferente vai ser acrescentado ao valor anterior. EXEMPLO: ela começa com zero, depois com o valor que recebe a variável idade, digamos que 12, depois na próxima vez que o laço for  rodar vai acrescentar outro valor de idade, digamos que 13 e ai o valor que a variável soma vai ter agora será 12+13, que é 25. Na próxima vez que rodar o for a variável soma será 25+idade, e assim o valor da variável soma vai crescendo.

Lembra que média é a soma de todos os valores dividido pela quantidade de valores? Por isso a variável media fora do for é igual a soma dividido por 40.

Se um exemplo de algoritmo de For:

Algoritmo For

Algoritmo For

Por favor, qualquer dúvida avisem, eihn?

h1

Dois códigos… um em C e outro em C++

Junho 29, 2009

Uhn, foi mal não postar o resto de XNA… semana péssima…começou com um mal sábado…

Charada: qual desses dois códigos é melhor? Por que um deles não tá funcionando direito? Qual era o objetivo?

#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
int M[4];
int I;
for (I = 1; I <=4; I++)
{
printf(” Entre com o %d numero: “, I); scanf(“%f”, &M[I]);

if ((M[I] %2 == 0)||(M[I] %3 == 0))
{
printf(“Numero divizivel por 2 ou 3  “, M[I]);
}        }

getch();
}

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int M[4], I;
for(I=1; I<=4; I++)
{
cout<<”Entre com numero  “<<I<<endl;
cin>>M[I];
if((M[I]%2==0)||(M[I]%3==0))
{
cout<<”Numero “<<M[I]<<” eh divisivel por 2 ou 3″<<endl;
}
}
system(“PAUSE”);
return EXIT_SUCCESS;
}

resposta…?

adivinha quando sai

h1

Laço de repetição do while

Junho 22, 2009

Oi, vamos estudar o laço Do While agora?

Para quem não lembra o que é laço de repetição ou while ver o post: http://amethistyreport.wordpress.com/2009/05/26/laco-de-repeticao-while/

Bem, o Do While é bem parecido com o while, porém a condição fica no final do laço.

Mas ele tem uma coisa legal: ele é rodado pelo menos uma vez.

Seguinte: o computador ao ver o do (comando “faça”) entra dentro do laço, faz ele, e ao encontra o while (comando “enquanto”) ele verifica se a pode fazer o do de novo. Se pode ele faz de novo, se não ele não faz.

EXEMPLO:

int contador, valor;

contador=1;

do

{

cout<<”Digite um numero”<<endl;

cin>>valor;

cout>>”Voce digitou “<<valor<<endl;

contador=contador+1;

}

while(contador<=10);

O que este programa faz?

Ele pede o número e fala que número você digitou e no final soma mais um no contador. Toda vez que o programa rodar o do while o contador vai ter um valor diferente. Logo quando o contador chegar a 10 ele para de rodar.

Legal né?

Nota: lembre-se que o while é fora das chaves do do, e a condição de existência (enquanto) é dentro de parenteses e tem um ponto-e-virgula depois.

Por hoje é só pessoal.

Fica aqui um exemplo de fluxograma com while

fluxograma do while

fluxograma do while