quinta-feira, 23 de setembro de 2010

Repetições [Parte I - While]

Processos de repetição se vêem necessários muito commumente na computação. Como um exemplo simples, de que modo você faria para calcular o factorial de um número? Tentar resolver este problema sem um laço de repetição provavelmente dará uma dor de cabeça enorme, pois não se sabe de antemão o tamanho do número a ser calculado o factorial, podendo ser preciso processar várias multiplicações.

Para isto, a linguagem C fornece 3 comandos de repetição que facilitam muito a solução destes problemas. São eles:
-> while
-> for
-> do - while

Pretendo mostrar para vocês esses comandos, um de cada vez.

Primeiramente veremos como funciona o while.
while ( expressão booleana )
{

"comandos a serem executados repetidamente";

expressão de incremento;
}

Considerações importantes:
-> Como no caso dos condicionais, não se usa " ; " depois do while;
-> A expressão booleana é do mesmo tipo da usada nos condicionais;
-> Enquanto a expressão booleana for verdadeira, os comandos dentro das chaves serão executados.
-> A expressão de incremento precisa sempre existir, caso contrário, uma vez executado o while ele entrará em loop infinito, já que a expressão booleana ficará sempre verdadeira.

Exemplo:
int main (void)
{
int i;
int n;
int f = 1; /* o fatorial do menor número não negativo é 1 */
printf("Digite um numero inteiro nao negativo:\n");
scanf("%d", &n);
i = 1;
/* calcula fatorial */
while ( i <= n )
{
f = f * i; /* aqui será feito f*1*2*3… */
i++; /* ou i = i + 1 se preferirem */
}
printf("Fatorial = %d \n",f);
return 0;
}

Fazendo o "chinês" com n = 3 por exemplo: O while será executado 3 vezes, já que i começa de 1 e é incrementado em 1 unidade. na primeira iteração temos f = 1 * 1, na segunda f = 1 * 2 e na terceira f = 2 * 3, resultado final 6.

Por André Calfa

E é isso aí!
Os dois próximos posts serão explicando o "for" e o "do while".

Atée o/

quinta-feira, 16 de setembro de 2010

Condicionais

Imagine como faríamos para imprimir se um número é negativo ou positivo. Com o que sabemos até agora é impossível dizer se um número é positivo.

Para isso precisamos de uma estrutura chamada "if" ("se" em inglês).

O modelo do "if" é o seguinte:
if(expressão)
{
comandos a ser executados
}

Assim, imaginando que o valor a ser testado esteja armazenado numa variável de nome N, podemos imprimir se ele é positivo executando as seguintes linhas de comando.

if(N>=0)
{
printf("O numero N e positivo.\n");
}

E se quiséssemos imprimir também se o número é negativo?
Para isso temos uma estrutura complementar do if chamada else (se não, em inglês). É intuitivo que pra você testar um se não você primeiro deve ter testado um se. Então para imprimir se um número é positivo ou negativo seria:

if(N>=0)
{
printf("O numero N e positivo.\n");
}
else
{
printf("O numero N e negativo.\n");
}

Os operadores lógicos possíveis são:
"a > b" verdade se a maior que b
"a < b" verdade se a menor que b
"a >= b" verdade se a maior ou igual a b
"a <= b" verdade se a menor ou igual a b
"a == b" verdade se a igual a b
"a && b" verdade se a e b forem verdade
"a || b" verdade se ou a, ou b forem verdade

Onde a e b são variáveis ou outras expressões lógicas.

E é isso por hoje! :D
o/

sexta-feira, 10 de setembro de 2010

Glossário sobre variáveis

Aqui vai um pequeno glossário dos termos que você vai ler muito frequentemente daqui pra frente nos meus posts.

Declarar uma variável significa dizer que ela existe para o programa, dizendo o tipo e o nome dela na área de declaração de variáveis.

Inicializar uma variável significa atribuir um valor a uma variável já declarada.

Ler uma variável significa atribuir um valor lido do teclado a uma variável (usando scanf).

Incrementar uma variável significa somar 1 ao valor da variável.

Decrementar uma variável significa subtrair 1 ao valor da variável.

Zerar uma variável significa atribuir a ela o valor 0.

quinta-feira, 9 de setembro de 2010

Operando com variáveis

Bom, nesse post eu acredito que vocês já saibam como funcionam as variáveis e como lemos elas do teclado (scanf) e imprimimos elas na tela (printf).

Então sigamos com alguns exemplos!

Ex1.: Atribuindo um valor a uma variável
Vamos supor que eu crie uma variável do tipo float, chamada PI e que eu queira atribuir a ela o valor 3.1415, como eu faria?
Basta escrever a linha de comando:
PI = 3.1415; (lê-se variável PI recebe 3.1415)

Lembrando que a variável PI deve ter sido declarada.

Ex2.: Atribuindo valor de uma variável a outra variável
Vamos supor agora que você no mesmo programa declare uma variável float chamada PI2, por algum motivo, e queira que ela tenha o mesmo valor de PI, como você faria?
É simples. Depois de declarar PI2 basta escrever a linha de comando:
PI2 = PI; (lê-se variável PI2 recebe o VALOR da variável PI)

Lembrando que a variável PI2 deve ter sido declarada e a variável PI deve ter sido inicializada.

Ex3.: Atribuindo o mesmo valor a várias variáveis
Um modo mais enxuto de se fazer a mesma coisa seria declarar as duas variáveis ao mesmo tempo com o valor 3.1415. Como?
Assim:
PI = PI2 = 3.1415; (lê-se variáveis PI e PI2 recebem 3.1415)

Ex4.: Atribuindo o resultado de uma expressão a uma variável
E se eu quisesse armazenar numa variável inteira chamada soma o valor da soma de dois números que eu li do teclado (usando scanf)?
É simples. Segue a linha de código:
soma = num1 + num2; (lê-se variável soma recebe o VALOR da variável num1 + o VALOR da variável num2)

Isso também vale para subtração (-), multiplicação (*), divisão (/) e resto da divisão (%).
Vale lembrar que num1 e num2 tem que ser declarados, bem como a variável soma e serem lidos do teclado com o scanf o que foi omitido no código acima, visto que, espero eu, vocês saibam fazer isso (se não souberem é só ler os posts antigos).

Ex5.: Fazendo uma variável receber seu próprio valor
Também é possível que você queira, por exemplo, dobrar o valor de uma variável.
Isso é feito da seguinte maneira:
num = num*2; (lê-se variável num recebe o VALOR da variável num vezes 2)
O que é equivalente a uma forma mais enxuta:
num *= 2; (lê-se do mesmo modo)

Lembrando que para isso é primordial que num tenha sido inicializada antes, senão o compilador tentará fazer uma operação com um lixo de memória e, acredite em mim, você não vai querer isso x)

Ex6.: No printf
Você pode fazer o printf imprimir diretamente o resultado de uma operação da seguinte maneira:
printf("O dobro desse valor e: %d", valor*2);

Ex7.: O que você não pode fazer
Você não pode tentar inicializar um VALOR. Olhe o exemplo a seguir:
2 = num;
Bem como você não pode fazer isso:
num * 2 = num;

Acho que isso é só por esse post.
Até mais galera! o/

printf, scanf, variáveis e seus tipos

No último post nós usamos a função printf sem realmente ver como ela funciona, espero que até o fim desse post você já esteja entendendo completamente como chamar a função printf e scanf.
Porém, meu primeiro objetivo nesse post é que vocês comecem a entender as variáveis e seus tipos, vocês perceberão o por quê.

O que é uma variável?
Quando você declara uma variável no seu programa, é como se você criasse uma caixa que pode armazenar dados, porém, deve-se ter cuidado, porque cada caixa dessa só pode armazenar dados de determinados tipos.

Tipos de variáveis
Existem alguns tipos de variáveis em C, explicitarei 3 das principais e direi que tipo de valor elas armazenam.
int (sigla de tipo - %d) - armazena um número inteiro
float (sigla de tipo - %f) - armazena um número real
char (sigla de tipo - %c) - armazena UM caracter
Siglas de tipo logo serão explicadas.

Declarando Variáveis
Para declarar variáveis basta colocar o tipo dela, seguido pelo nome desejado para a variável (de preferência algo que faça referência à função dela no seu programa).

Exemplo: int soma;

Agora sim, estamos prontos para explicar printf's e scanf's decentemente.

scanf
É comum termos que ler um valor digitado pelo usuário em um programa. Na verdade, imagine se fizéssemos um programa que soma dois números, mas esses dois números são sempre os mesmos? Que sentido teria?
Nenhum.

O que o scanf faz é pegar o valor digitado no teclado até que o usuário aperte enter.

E para onde vai esse valor?
Para uma variável, é claro.

O modo certo de se chamar a função scanf é a seguinte:
scanf("sigla de tipo", &nome da variável);

A sigla de tipo indica pro scanf o tipo da variável que vai ser lida e o & não foi um erro de digitação, ele é obrigatório antes do nome da variável (mais uma vez, o significado não é importante).

printf
Vocês já sabem que a função printf imprime algo na tela, certo? Mas como é o modo certo de usá-la?
A função printf é uma função como qualquer outra, vista no último post sobre funções. Ela precisa receber parâmetros e ela tem um retorno. Por enquanto, o que interessa é saber como chamá-la corretamente e, para isso, precisamos apenas saber os parâmetros que ela recebe.

A função printf recebe como parâmetro um texto, ou, uma sequência de "char's" e é interessante dizer que se você quiser imprimir o valor de uma variável basta colocar a sigla de tipo no meio da sequência e indicar o nome da variável no fim. Vejamos como ela funciona:
printf("Texto a ser impresso e/ou sigla(s) de tipo(s)", nome(s) da variável(is));

Lembrando que dessa vez o nome da variável vem sem o &.

Se eu quiser imprimir a soma de dois números, supondo que eu já tenha calculado isso e armazenado numa variável chamada soma seria da seguinte forma:
printf("A soma foi: %d", soma);

Muito bem, acredito que tenhamos desvendado um pouco esses tópicos. Na próxima postagem veremos um pouco de aplicação dessas variáveis.

Enquanto isso, modifique o 'Alô Mundo' para imprimir coisas diferentes. Tente também fazer esse programa ler um valor que o usuário digitar e imprimir esse valor.

Até a próxima! o/

Funções

Olá pessoal!

Até o fim desse post eu garanto, desde que tenham entendido tudo até aqui, que vocês estarão prontos pro seu primeiro programa em C.

Neste post falaremos sobre funções em C.

Primeiramente vale a pena dizer que seu programa tem funções auxiliares e a função principal, chamada de "main".

O que é uma função?
Funções são blocos de comando que seu programa executará, começando da função principal.

Estrutura das funções
Do mesmo modo que um programa é escrito seguindo uma estrutura, as funções são escritas seguindo sua própria estrutura.

A estrutura das funções segue o seguinte modelo:
tipo_de_retorno nome_da_função (parâmetros (com seus tipos))
{
declaração das variáveis que a função usará
comandos que a função executará
retorno da função (pode ou não existir)
}

Não se desespere, vamos entender tudo isso agora.

Funcionamento de uma função
Vocês tem que entender que as funções executam ações e te retornam o resultado dessas ações. Esse é o papel delas.

Você pode criar uma função que some 2 números inteiros que o usuário digitar, por exemplo.

Nesse exemplo sua função receberia como parâmetros os 2 números inteiros (esse é o tipo deles, "inteiro") da função que a chamou, afinal, o computador não faz idéia dos números que você deseja que ele some, a menos que você indique-os.
Depois de somar os dois números a função retornaria esse resultado, daí o tipo de retorno que também seria um número inteiro.

Esses tais "tipos" ficarão claros no próximo post sobre variáveis.

Main, a função especial
A main tem sempre o seguinte cabeçalho:
int main (void)
{
declaração de variáveis
comandos que a função executará

return 0;
(a main sempre deve retornar zero, por isso o código fixo, o motivo não é importante, é algo a nível de sistema, por isso, não vale a pena explicar)
}

Agora acredito que vocês estejam prontos pro seu primeiro programa em C, chamado 'Alô Mundo'.

Se você foi curioso o suficiente você já viu esse programa no tutorial do primeiro post.

Esse programa é realmente inútil, mas é emocionante ver seu primeiro programa rodando *-*
Hahahaha!
Então, mãos à massa.

O programa é bem pequeno, logo, peço que não copiem, digitem ele do zero.

#include < stdio.h > /* declaração da biblioteca que vamos usar, sem espaços */

int main (void) /* cabeçalho da main */
{
printf("Alo Mundo!");
/* chama a função de impressão que está na biblioteca "stdio.h"
essa função será vista mais a fundo em posts futuros */

return 0; /* retorno da main, sempre 0 */
}

É isso galera! Não se preocupem se ainda estiverem com algumas dúvidas, muitas coisas ainda estão por ser explicadas.

Até mais o/

Bibliotecas e Constantes

E aí pessoal!

Agora que vocês já sabem criar um novo projeto e já conhecem a estrutura de um programa em C eu vou começar a definir algumas coisas importantes mostradas no post anterior.

Bibliotecas
As bibliotecas são um grande (ou não tão grande assim) conjunto de funções já programadas em C para poupar algum trabalho seu. :D

A biblioteca padrão do C, que vocês vão adicionar em seus programas daqui pra frente é a "stdio.h".

A "stdio.h" tem várias funções mas eu só vou contar pra vocês sobre algumas x)
Duas principais são: printf e scanf.

Essas duas funções são operações de entrada e saída. São operações complicadas de serem programadas, por isso, dêem graças a Deus de terem a "stdio.h" do lado de vocês.

A printf imprime algo na tela e a scanf lê algo do teclado.
As duas serão mais bem explicadas em um post futuro.

As bibliotecas são declaradas da seguinte maneira.

#include< nome > (sem os espaços) que nesse caso ficaria #include < stdio.h > (sem os espaços)

Constantes
As constantes são nomes que você pode dar a alguma coisa que será muito usada no seu programa, seja essa coisa um número inteiro ou uma palavra.

O que o programa vai fazer é simplesmente substituir qualquer incidência dessa constante pelo valor ao qual você a atribuiu.

Constantes são declaradas da seguinte maneira.

#define nome_escolhido valor

Supondo que eu queira definir o valor de PI para que eu possa usá-lo no meu programa sem ter que ficar digitando toda vez o mesmo valor, ficaria:

#define PI 3.1415

Vale lembrar que as constantes são opcionais.

Qual é a vantagem de utilizar uma constante?
Vamos supor que você está fazendo um programa muito grande, no qual você utiliza o valor de PI. Agora vamos imaginar que você precisa aumentar a precisão de PI no seu programa. Se você utilizou o define você só precisa alterar uma linha do seu programa. Se não, você precisa alterar todas as linhas na qual utilizou o valor 3.1415.

Muito bem, agora temos metade da estrutura de um programa definida e, espero eu, entendida.

Até a próxima! o/

A estrutura de um programa em C

Agora sim, espero poder partir do preceito que todos vocês sabem abrir um novo projeto no Visual Studio 2005, certo?

Se não:
Venha pra .

Se sim:
Vamos começar pela estrutura de um programa em C que é o nosso foco aqui.

Todo programa em C segue a determinada estrutura:

- Declaração das bibliotecas que serão usadas
- Definição de constantes
- Declaração e/ou Definição de funções auxiliares que serão usadas
- Declaração da função principal

Os campos em negrito são obrigatórios.

Vocês não precisam entender nada disso que eu apresentei ali em cima, mas tenham isso em mente. Vou explicar cada uma delas em posts separados daqui a pouco.

Até mais o/

Apresentação e [talvez] primeira lição

E aí galera!

Meu nome é Ruan, sou monitor de Programação I na PUC-RJ desde 2010-1 e sei bem o perrengue que alguns de vocês passam durante essa matéria.

A questão é que programação tem um grande problema. É 8 ou 80.

Ou você reprova ou passa muito bem...

Por quê?
Porque a matéria é muito fácil, mas pode se tornar muito complicada se você não estiver certo do que está fazendo.

O objetivo deste blog é ajudar a galera que tá com problemas de prestar atenção às aulas e tá realmente boiando em Prog I, hahaha!

Vou partir do preceito de que tudo que vocês sabem até aqui é abrir um novo projeto no Visual Studio 2005.

Quer dizer... vocês sabem, não é?
Se não sabem, aqui vai a primeira lição.

E a primeira lição é: Sigam o tuorial
Vocês não precisam fazer o tutorial completo, só a parte que te ensina a criar um novo projeto, todo o resto eu vou ensinar pra vocês. É claro que se vocês aprenderem lá o resultado vai ser o mesmo. xD

Depois de estarem craques nisso estamos prontos para começar nossas "aulas particulares" de Prog I.