segunda-feira, 1 de fevereiro de 2010

Matriz:

Antes de começarmos com matriz, que tal uma revisão de matemática sobre matrizes?
Sim, matemática novamente :)

Essa aula, vocês aprenderão "sozinhos", peço que, leiam e aprendam apenas 3 operações, somar, subtrair e multiplicar matrizes.
Além de souber o que é uma matriz quadrada e como achar a transposta de uma matriz!
Vou disponibilizar 2 sites onde vocês podem retirar todas essas informações entre várias outras.

colégio web: matriz
brasil escola: matriz


Bom estudo pessoal!

Exercícios resolvidos de vetor:

1) Dada uma sequeência de n elementos, imprimi-la em ordem inversa.
2) Dada uma sequência de n elementos, imprimi-la em ordem decrescente.
3) Dizemos que uma sequência de n elementos, com n par, se as seguintes somas são iguais:

a soma do maior elemento com o menor
a soma do segundo maior elemento com o segundo menor
a soma do terceiro maior elemento com o terceiro menor ...

ex: 2 12 3 6 16 15 é uma sequência balanceada, pois 16+2=15+3=12+6
Dados n (n par) e uma sequência de n elementos, verificar se essa sequência é balanceada.



1)

#include<stdio.h>

int main(void)
{
int vet[100],cont,n;
printf("digite o numero de termos da sequencia: ");
scanf("%d",&n);

for(cont=0; cont=0 ;cont--)
printf("%d\n",vet[cont]);

getchar();
getchar();
}

2)


#include<stdio.h>

int main(void)
{
int a[50],i,n,j,troca;
printf("digite o numero de termos da sequencia: ");
scanf("%d",&n);

for(i=0; i<=n-1 ;i++){
printf("digite um termo da sequencia: ");
scanf("%d",&a[i]);
}
for(i=0; i<=n-1 ;i++){
for(j=i+1; j<=n-1; j++){
if(a[i]>a[j]){
troca=a[j];
a[j]=a[i];
a[i]=troca;
}
}
}

for(i=0; i<=n-1 ;i++)
printf("%d",a[i]);

getchar();
getchar();
}


3)

#include<stdio.h>

int main(void)
{
int a[50],i,n,j,troca,soma,somant,k;
printf("digite o numero de termos da sequencia: ");
scanf("%d",&n);

for(i=0; i<=n-1 ;i++){
printf("digite um termo da sequencia: ");
scanf("%d",&a[i]);
}
for(i=0; i<=n-1 ;i++){
for(j=i+1; j<=n-1; j++){
if(a[i]>a[j]){
troca=a[j];
a[j]=a[i];
a[i]=troca;
}
}
}
k=n-1;
soma=a[0]+a[k];
for(i=1;i<= (n/2)-1 ;i++){
k--;
somant=a[i]+a[k];
if(soma!=somant)
i=2*n;

soma=somant;
}

if(i==2*n+1)
printf("nao eh balanceada");
else
printf("eh balanceada");

getchar();
getchar();
}


Tentem entender a lógica desses problemas, será de grande ajuda para passarmos para o próximo assunto (matriz)! Daqui a pouco eu já posto a aula de matrizes, see yah!

Vetores em C: (continuação)

Bom, vamos continuar com vetor?

Vamos a um exemplo de questão:

1)Faça um programa que leia n notas utilizando vetor e imprima a média dessas notas.

Oras, como vamos fazer se não sabemos quantas notas sao?
Simples, imagine que você tem que calcular a média de uma sala de aula normal, quantos alunos você preve que terá nessa sala?
50 é uma quantidade razoável, não?
Então, declaramos o vetor com 50 termos, lemos n e mandamos ler as notas até um número anterior a n (como todos aprenderam na aula passada, a posição do vetor começa pela posição zero, logo, a última posição de um vetor de 50 termos, será a posição 49!


2) Dada uma sequeência de n elementos, imprimi-la em ordem inversa.
3) Dada uma sequência de n elementos, imprimi-la em ordem decrescente.
4) Dizemos que uma sequência de n elementos, com n par, se as seguintes somas são iguais:

a soma do maior elemento com o menor
a soma do segundo maior elemento com o segundo menor
a soma do terceiro maior elemento com o terceiro menor ...

ex: 2 12 3 6 16 15 é uma sequência balanceada, pois 16+2=15+3=12+6
Dados n (n par) e uma sequência de n elementos, verificar se essa sequência é balanceada.


Oyasuminasai!


obs: faremos o exercício 3 e o exercício 4, no próximo post, devido a sua dificuldade.

Exercícios resolvidos de vetor:

Exercícios para fixarmos vetor:
Vamos começar de leve hoje!


#include<stdio.h>

int main(void)
{
int dado[6],n, cont,result,i;

printf("quantas vezes o dado foi lancado? ");
scanf("%d",&n);

/*vamos zerar todas as células da variável dado para podermos contar
corretamente o numero de vezes das faces obtidas */

for(i=0;i < n;i++){
printf("digite a face obtida na %d vez.",cont+1);
scanf("%d",&result);
if(result==1)
dado[0]++;
else if (result==2)
dado[1]++;
else if(result==3)
dado[2]++;
else if(result==4)
dado[3]++;
else if(result==5)
dado[4]++;
else
dado[5]++;
}
printf("%d faces um\n",dado[0]);
printf("%d faces dois\n",dado[1]);
printf("%d faces tres\n",dado[2]);
printf("%d faces quatro\n",dado[3]);
printf("%d faces cinco\n",dado[4]);
printf("%d faces seis",dado[5]);

getchar();
getchar();
}

Daqui a pouco, vou postar mais uma aula e mais exercícios, então, até daqui a pouco, ok?

Vetores:

Motivação para aprendermos vetor:

Dados 5 notas, calcular a média das notas e identificar se elas são maiores ou menor do que a média das notas:

#include<stdio.h>
int main(void)
{

float nota1,nota2,nota3,nota4,nota5,media;
media=0.0;

scanf("%f",&nota1);
scanf("%f",&nota2);
scanf("%f",&nota3);
scanf("%f",&nota4);
scanf("%f",&nota5);
media=nota1+nota2+nota3+nota4+nota5;
if(nota1>media)
printf("%f > %f",nota1,media);
if(nota2>media)
printf("%f > %f",nota2,media);
if(nota3>media)
printf("%f > %f",nota3,media);
if(nota4>media)
printf("%f > %f",nota4,media);
if(nota5>media)
printf("%f > %f",nota5,media);

getchar();
getchar();
}

Isso, de fato, é uma solução, porém, como sabemos, em uma sala de aula, não temos apenas 5 alunos, então, e se fossem 50 alunos, ou, 1000 alunos?
Meio cansativo, não?
Para solucionarmos isso, aprenderemos vetor, ou, também chamada de variável composta homogênea unidimensinal.

Um vetor, é uma estrutura de armazenamento de dados e é usada para armazenar valores do mesmo tipo.
Um vetor, possui "células" de armazenamento, por exemplo, criamos uma variável nota, essa variável nota, poderá armazenar quantos notas você quiser, isso é basicamente um vetor.
Veja um exemplo de declaração de vetor para você entender melhor:

float nota[5];

Nessa declaração, estamos reservando 5 células, ou seja, 5 números para a variável nota!
A referência de cada uma dessas células é realizada pelo nome do vetor nota e por um índice.

O índice, sempre começa do zero, ou seja, como são nesse caso, cinco células, iremos percorrer até a índice 4, pois, 0,1,2,3,4 = 5 células!

Segue basicamente essa estrutura:

0 1 2 3 4
|...|...|...|...|...|

Para referenciar o conteúdo de cada célula do vetor nota, por exemplo, queremos ler nota na célula 0, então fazemos:

scanf("%f",&nota[0]);

agora, na célula 1:

scanf("%d",&nota[1]);

Entenderam o raciocínio?

Vamos fazer aquele mesmo exercício das notas, agora com a utilização de vetor, para vermos como é muito mais fácil e prático:

#include<stdio.h>
int main(void)
{
float nota[5], media;
int cont;

media=0.0;
cont=0;

while(cont<=4){ scanf("%f",nota[cont]); media=media+nota[cont]); cont++; } /*veja, na primeira entrada do laço, cont vale 0, entao, leremos nota[0], depois, incrementamos cont e na segunda entrada do laço, leremos nota[1].. até nota[4]! */ for(cont=0; cont<=4; cont++){ if(nota[cont]>media)
printf("a nota %d eh maior que a media da sala",cont+1 );
eslse
printf("a nota %d eh menor que a media da sala",cont+1);
}
getchar();
getchar();
}
Procurem entender perfeitamente essa estrutura, mais tarde, continuaremos com exemplos sobre ela! Por hora, façam esse exercício e, como agora temos o fórum, postem no fórum seu código para ser avaliado :)
1) Dado uma sequência de 10 números inteiros, imprimi-lá em ordem inversa:

Exercícios resolvidos de séries em C:

1) Fazer um programa que calcule e escreva a soma de S:

S= 1/1 + 3/2 + 5/3 + 7/4 ... 99/50

Ah, antes disso, só vamos introduzir algo novo, quando dizemos, por exemplo:

cont=cont+1;

É a mesma coisa que dizer:

cont++;

e também

cont=cont-1;

é a mesma coisa que:

cont--;
Então, vamos nos acostumar com o simbolo ++ e --, a partir de agora.

#include<stdio.h>

int main(void)
{
int numerador,denominador;
float soma;

numerador=1;
soma=0;

for(denominador=1; denominador<=50; denominador++){
soma=soma+ (float)numerador/denominador; /*perceba a necessida do (float) */
numerador=numerador+2;
}
printf("%f",soma);
getchar();
getchar();
}

2) Fazer um programa que calcule e escreva a seguinte soma:

S= (37*38)/1 + (36*37)/2 + (35*36)/3 .... (1*2)/37

#include<stdio.h>

int main(void)
{
int numerador,denominador;
float soma;

numerador=37;
soma=0;

for(denominador=1; denominador<=37; denominador++){
soma=soma+((float)numerador*(numerador+1))/denominador;
numerador--;
}
printf("%f",soma);

getchar();
getchar();
}

Perceba a importância do parênteses nesse programa.

3) Fazer um programa que calcule e escreva o valor de S onde:

S= 1/1 - 2/4 + 3/9 - 4/16 ... -10/100

Perceba que nesse, não temos uma ordem de incremento no denominador, igual tinhamos nos anteriores e perceba também a variação do sinal!
Se olhar mais atentamente, verá que, o denominador é sempre o quadrado do numerador, então, problema resolvido!

#include<stdio.h>

int main(void)
{
int numerador;
float soma;

numerador=1;
soma=0;

while(numerador!=11){
soma=soma+(float)numerador/(numerador*numerador);
if(numerador>0){
numerador=-numerador;
numerador--;
}
else{
numerador=-numerador;
numerador++;
}
}
printf("%f",soma);

getchar();
getchar();
}


Bom, depois eu continuo com as séries, até!

Operador modificador de tipo:

Essa é uma continuação da aula de números de ponto flutuante.
Vamos a um exemplo diretamente para vocês entenderem melhor o que é um modificador de tipo!
ex:

int n,i;
float divisao;

i=5
n=9;
divisao=i/n;
printf("%f",divisao);


oras, fácil não?
o valor mostrado será 0.5555.. certo?
ERRADO!

Não é porque declaramos divisão como uma variável de número flutuante que ela armazenará valores de ponto flutuante.
Como ambas as variáveis, i e n, são variáveis inteiras, o resultado dessa operação será o valor inteiro resultado dessa operação, ou seja, no caso, o valor inteiro é zero, logo, divisão valerá 0.000..
Somente quando temos um ou ambos os operandos da operação declarados como número flutuante, essa conta será feita corretamente!
ex:

int i;
float n,soma;

i=5;
n=9.0;
divisao=i/n;
printf("%f",divisao);

Agora sim, o valor da divisão aparecerá 0.555.. pois, como uma das variáveis da operação é de ponto flutuante, a operação também se torna de ponto flutuante!

Mas, vocês poderiam perguntar, oras, porque não declaramos todas as variáveis como ponto flutuante e fim de papo?
É simples, o tamanho do programa, aumenta muito com relação a declararmos as variáveis como se fossem inteiras!
Então, foi necessária a criação do operador modificador de tipo!
Nesse nosso caso, i=5 e n=9, ou seja, ambas são inteiras, então, como vamos fazer essa operação se tornar de ponto flutuante?
Simples, vejamos o exemplo!
ex:

int n,i;
float soma;

i=5;
n=9;
soma=(float)i/n;
printf("%f",soma);

com esse (float) na frente da variável i, "transformamos" o i momentaneamente, em uma variável de ponto flutuante e, assim, conseguimos efetuar a operação e obter o resultado desejado!

ex:

Dado um inteiro positivo n, calcular e imprimir o valor da seguinte soma:

1/n + 2/(n-1) + ... n/1

qualquer dúvida, contatem-me!
konbawa!

Exercícios em C resolvidos 2:

Vamos dar uma pausa e fazer exercícios?

Ah, antes, vamos aprender a fazer comentários nos nossos programas para facilitar as coisas!
Um comentário, sempre começa com /* e termina com */
Por exemplo:

#include<stdio.h>

int main(void){
int numero;
scanf("%d",&numero);
if(numero>=5) /* se o numero for maior ou igual a 5 */
printf("maior que 5"); /* caso o numero seja maior que 5 */
else
printf("menor que 5"); /*caso o numero seja menor que 5 */

getchar();
getchar();
}

isso são comentários, C quando vê algo dentro de /* */ despreza e pula para o próximo comando!
obs importante: não sei se eu comentei, porém, quando utilizamos apenas um comando no if ou else, por exemplo, se a condição for verdadeira, só ocorrerá um comando, que é o printf e com o else é a mesma coisa, então, podemos desprezar as chaves!
Essa regra também vale para while e for..

exemplo com utilização:

while(numero>=5){
printf("%d",numero);
numero=1;
}

exemplo de não ter necessidade da utilização, ou seja, utilizar ou não, dá na mesma!

while(numero>=5)
printf("%d",numero);

ou seja, se tiver 2 ou mais comandos, é obrigatório o uso das chaves, senão, se houver apenas um comando, vai a seu critério!

exercício 1:

Escreva um programa que receba três valores, armazenando-os nas variáveis x,y e z, e ordene esses valores de modo que, ao final, o menor valor esteja armazenado na variável x, o valor intermediário esteja armazenado na variável y e o maior valor esteja armazenado na variável z.

#include<stdio.h>

int main(void)
{
int x,y,z,troca;

printf("digite o valor de x: ");
scanf("%d",&x);
printf("digite o valor de y: ");
scanf("%d",&y);
printf("digite o valor de z: ");
scanf("%d",&z);

if(x>y){
troca=y;
y=x;
x=troca;
}
if(y>z){
troca=z;
z=y;
y=troca;
}
if(x>y){
troca=y;
y=x;
x=troca;
}

printf("%d,%d,%d",x,y,z);
getchar();
getchar();
}

Veja a importância de uma variável de troca!
Leia e releia muitas vezes esse programa, é fundamental para desenvolver a capacidade de raciocínio lógico, por isso eu não colocarei comentários sobre ele.

exercício 2:

Escreva um programa que receba um número inteiro x e avalie o polinômio: 3x³-5x²+2x-1

#include<stdio.h>

int main(void)
{
int x, poli;
printf("digite o valor de x: ");
scanf("%d",&x);
poli=3*x*x*x -5*x*x +2*x -1;
printf("o polinomio com x=%d eh igual a %d",x,poli);

getchar();
getchar();
}

3) Dado uma sequência de n inteiros, somar os números pares e os números ímpares dessa sequência:

#include<stdio.h>

int main(void)
{
int par,numero,impar,ntermos,cont;
printf("digite o numero de termos: ");
scanf("%d",&ntermos); /*numero de termos da sequencia */
cont=1;
par=0;
impar=0;

while(cont<=ntermos){
printf("digite um numero: ");
scanf("%d",&numero); /*ler um número */
if(numero%2==0) /* se o resto da divisao do numero por 2 é igual a 0 o número é par */
par=par+numero;
else
impar=impar+numero;

cont=cont+1;
}
/*observe que como temos somente um comando no if, não precisamos utilizar chaves,
e a mesma coisa no else*/

printf("a soma dos numeros pares eh de %d e a dos impares eh de %d",par,impar);

getchar();
getchar();
}


obs: caso esteja algo errado, por favor, não deixe de postar, resolvi todos agora e pode ter algum erro que eu não tenha visto!

Bom, é isso, até mais tarde, né?

Estrutura de Repetição do-while:

pela própria tradução de "do" e de "while", podemos perceber como essa estrutura será utilizada.
do = faça
while = enquanto

Ou seja, por exemplo, dado uma sequência de números, somar ela enquanto ela for diferente de zero!
Oras, fácil, não?
Vamos ver o exemplo desse problema utilizando do-while!

#include<stdio.h>

int main(void)
{
int numero,soma;
soma=0;

do{
printf("digite um número: ");
scanf("%i",&numero);
soma=soma+numero;
}
while(numero!=0);

printf("%i",soma);

getchar();
getchar();
}

A diferenã de do-while para while, é que, em do-while sempre vamos ler pelo menos uma vez o laço, pois, a condição está no final do laço e de começo não sabemos ela e em while, se a condição não for satisfeita nem entraremos no laço!

ou seja, em do-while o primeiro laço sempre será rodado!

só mais uma observação: %i = &d
Temos algumas diferenças entre ela sobre número octal, mas, veremos mais adiante e a partir de agora, passaremos a utilizar %d, que é a forma mais correta para inteiros!

Até!

Noções de Lógica: (continuação)

Continuando a parte de noções de lógica:

conectivo || (lê-se "ou")

tabela verdade:

V F = V
F V = V
V V = V
F F = F

ou seja, a expressão com conectivo || só será falsa se as duas proposições forem falsas!
ex:

cont=1;

while(cont>5 || cont < 3){
.
.
cont=cont+1;
}

cont não é maior que 5, porém, cont é menor que 3, então, com a utilização do conectivo ||, essa expressão é verdadeira e nós entraremos no laço!

no próximo post eu posto um exemplo melhor!

E por último:

O conectivo !(lê-se falso)

Em C, se tivermos por exemplo:

cont=1;

if(cont){
.
.
}

cont tem armazenado o valor 1, e quando temos expressões desse tipo, qualquer que seja o valor da variável, se for diferente de zero, a linguagem C reconhece essa expressão como verdadeira.
ou seja, a expressão if nesse caso será verdadeira e entraremos nela, nesse caso!
com o conectivo !, podemos colocar essa expressão como falso, ex:

cont=1;

if(!cont){
.
.
.
}

cont vale 1, porém, o conectivo falso, "troca" o valor lógico da variavel, ou seja, cont passa a ser falso!

se cont fosse zero, e utilizassemos o conectivo, cont passaria a ser verdadeiro!

mais tarde eu posto exemplos disso!
bom, até!

Exercícios em C resolvidos:

1. Dado um inteiro positivo p, verificar se p é primo.

#include<stdio.h>

int main(void)
{
int n; /* candidato a primo */
int divisor; /* candidato a divisor de n */
int eprimo; /* indica se n ainda tem chance de ser primo */

printf("Teste de primalidade\n");
printf("Digite um inteiro: ");
scanf("%i", &n);
printf ("Candidato a primo = %i\n", n);

/* inicializacoes */
if (n <= 1){
eprimo = 0; /* nenhum numero <= 1 é primo */
}
else{
eprimo = 1; /* o numero é primo ate que se prove o contrario */
}
/* os candidatos a divisores positivos de n sao 1,2,...,n/2 */
divisor = 2;
while (divisor <= n/2 && eprimo == 1){
if (n % divisor == 0){
eprimo = 0; /* n nao é primo! */
}
divisor=divisor+1;
} printf("O inteiro %i ", n);
if (eprimo == 1) {
printf("é primo\n");
}
else{
printf("nao é primo\n");
}
return 0;
}

2.Dado um inteiro não-negativo n, determinar n!


#include <stdio.h>

int main(void) {
int n, /* guarda o numero dado */
contador,
fatorial;

printf("Calculo do fatorial de um numero\n");
printf("Digite um inteiro nao-negativo: ");
scanf("%i", &n);

/* inicializacoes */
fatorial = 1;
contador = 2;

while (contador <= n) {
fatorial = fatorial * contador;
contador = contador + 1;
}
printf("O valor de %i: %i\n", n, fatorial);
return 0;
}
3. Dados um inteiro x e um inteiro não-negativo n, calcular x n.
#include<stdio.h>

int main() {
int x, /* base */
n, /* expoente */
potencia, /* guarda as potencias parciais */
contador;

printf("Calculo de potencias\n");
printf("Digite um numero inteiro: \n");
scanf("%i", &x);
printf("Digite um numero um natural: ");
scanf("%i", &n);

/* Inicializacoes */
potencia = 1;
contador = 0;

/* Calculo da potencia */
while (contador != n) {
potencia = potencia * x;
contador = contador + 1;
}

printf("\nO valor de %i elevado a %i: %i\n", x, n, potencia);
return 0;
}

/fonte:
http://www.ime.usp.br/~macmulti/exercicios/inteiros/index.html

Noções de Lógica:

Sim, que tal uma aula de matemática hoje?
Hoje aprenderemos sobre noções de lógica, que também é uma coisa muito útil para nós!

Uma proposição é uma sentenção que pode ser classificada em verdadeira ou falsa.
Por exemplo:

5>3(V)
2 < 1(f)

Uma expressão lógica é formada por duas ou mais proposições. Relacionamos as proposições através de um operador lógico.
Existem três operadores lógicos na linguagem C.
Operador && (lê-se "E"):
uma expressão lógica com o conectivo &&, só será verdadeira se as duas proposições forem verdadeiras!
ex:

5>3 && 3>1

5 é maior que três E três é maior que um, como as duas proposições são verdadeiras, essa expressão também é verdadeira.

5>=5 && 3 < 1 cinco é maior ou igual a cinco "E" três é menor que um. três não é menor que um, logo,
como uma das proposições é falsa,
essa expressão também será falsa! ou seja, podemos montar uma tabela-verdade do conectivo && (e).
V e V = V
V e F = F
F e V = F
F e F = F

só um pequeno exemplo, depois eu continuarei essa aula:
digamos que a variavel cont seja igual a 1 a variavel numero seja 3 e
a variavel casa seja igual a 5.
while(cont < numero && cont < casa) {
.
.
cont=cont+1;
}
cont vale 1, logo é menor que 3 "E" é menor que 5, então entrará no laço,
na próxima vez que passar no laço, cont valerá 2. 2 é menor que 3 "E" é menor que 5, então,
entrará novamente no laço e cont valerá 3 agora! 3 não é menor que 3 "E" 3 é menor que 5.
Porém, como podemos observar na tabela verdade, como uma das proposições é falsa, a expressão toda
será falsa, ou seja, não entraremos mais no laço! Bom, falta ainda dois conectivos, mas,
mais tarde eu postarei novamente! É isso, até daqui a pouco! Ah, uma sugestão de livro,
para quem quiser aprender isso é o livro "fundamentos da matemática elementar volume 1",
é um exelente livro de matemática! Na internet mesmo, no www.4shared.com ou www.esnips.com você pode encontrar ele para baixar! Até!

Estruturas de Repetição:

Vamos aprender a nossa primeira de três estruturas de repetição, o comando while!

-While, é uma palavra inglesa que significa "enquanto", somente com isso, já podemos deduzir a sua funcionalidade.
Enquanto uma condição não for satisfeita, esse laço, como chamamos, se repetirá, até a condição ser satisfeita.

Antes de tudo, vamos analisar o quanto essa estrutura é importante!
Como escreveriamos um programa que, imprimisse os numeros de 1 a 5? Fácil, não?

#include<stdio.h>
int main(void)
{
printf("1\n");
printf("2\n");
printf("3\n");
printf("4\n");
printf("5\n");

getchar();
getchar();
}

Agora, escreva para mim um programa que mostra os 100 primeiros numeros positivos, ou melhor, os 10000 primeiros? Cansativo, não?
Acredito que, com isso, já possamos começar a estudar esse comando.

while, segue a mesma estrutura do if, que aprendemos nas aulas passadas, ou seja:

while(condicao){
comando 1
comando 2
.
.
comando n
}

No nosso exemplo, queriamos escrever um numero de 1 a 100, certo?
Ou seja, criamos uma variavel para fazer essa contabilização, dentro do laço while a incrementamos em 1, e enquanto ela não for maior que mil, esse laço se repetirá!

Um exemplo de como ficaria o programa:

#include<stdio.h>
int main(void)
{
int numero;
numero =1;
while(numero<=100){
printf("%i\n");
numero=numero+1;
}
getchar();
getchar();
}

ou seja, o programa começa com a variavel numero valendo 1, ela irá passar no laço e será verificado que 1 é menor que cem, entrará nesse laço, será impresso 1 no monitor e ela aumenta em 1, ou seja, o proxima valor de numero é 2, logo, ela repetirá esse processo, até numero valer 100, depois, a variavel valerá 101 e, como podemos notar, 101 não é menor que 100, logo, o laço se encerarrá e ela pulará para o proximo comando, que, no nosso caso sao os getchar..

Outro exemplo:

Fazer a soma dos numeros de 1 a 100.

#include<stdio.h>
int main(void)
{
int numero,soma;
numero =1;
soma=0;
while(numero<=100){
soma=soma+numero;
numero=numero+1;
}
printf("a soma dos numeros de 1 a 100 é %i",soma);
getchar();
getchar();
}

agora, você deve estar se perguntando, porque ele declarou soma= 0 ?
Veja o comando:

soma=soma+numero;

A parte a esquerda do igual, não é analizada, como bem sabemos, ela só será atribuida ao valor de soma+numero, agora, vamos analizar:

Se não declararmos zero no valor da soma, ficará:

soma+numero = ? + 1 = ??????

O programa compilará normalmente, PORÉM, você não especificou o valor de soma, logo, pode ter qualquer valor armazanado nessa variavel e o seu resultado com certeza não será o desejado.
Ou seja, se declararmos soma como zero, ficará:

soma=soma+numero=0+1
logo, soma valerá 1 agora e o numero, com o comando numero=numero+1, valerá 2.
Depois, soma=soma+numero=1+2=3, agora soma vale 3 e o numero com o incremento, passa a valer 3 também e assim sucessivamente até numero ser 100!
Espero que tenha ficado claro!
Qualquer duvida, deixe um comentário!

Ah, tarefa, claro ;p

1) Dado um inteiro positivo "n", somar os "n" primeiros numeros positivos.
2) Dado "n", imprimir os "n" primeiros impares positivos.

Mandem a resposta para meu email, se quiserem:
linguaemc@hotmail.com

Até mais!

Expressões aritméticas:

Existem cinco tipos de expressões aritméticas em C.

"Adição, subtração, multiplicação, divisão e resto da divisão."

Adição é tratada com o símbolo +
Subtração com o símbolo -
Multiplicação com o símbolo *
Divisão com o símbolo /
Resto da divisão com o símbolo %

Acredito que, a única coisa que devemos comentar seja a expressão resto da divisão.
Por exemplo:

5%2

Estamos querendo saber o resto da divisão de 5 por 2, que no caso é 1.
Ou seja, se mandarmos efetuar essa expressão, o programa nos retornará como resposta 1.

Agora, como na matemática, temos uma regrinha de precedência dos operadores.
exemplo:

5/4+1

poderiamos considerar como se fosse:

5/4 +1 = 2,25 ou
5/4+1 = 5/5 = 1

Em C, temos uma precedência, a multiplicação, divisão e resto de divisão são preferencias, ou seja, nesse caso, a resposta correta será a primeira resposta, pois a divisão tem prioridade sobre a soma, ou seja, ele fará primeiro 5/4 e depois somará o resultado disso com 1.
Porém, se quisermos que 5/4+1 seja 5/5, é só utilizarmos parenteses, como na matemática.
exemplo:

5/(4+1) = 5/5 = 1


outro exemplo:

5*6+2

como sabemos, C tem preferência pela divisão, multiplicação e resto da divisão, no caso, ele fará:

5*6 +2 = 30 + 2 = 32.


Até breve.

Estrutura Condicional Simples:

Estrutura condicional simples:

Decisões na linguagem C, são tomadas com o uso de estruturas condicionais.
Por exemplo:

#include<stdio.h>
int main(void)
{
int idade;
printf("informe sua idade: ");
scanf("%i",&idade);
if(idade>30){
printf("você é velho");
}
getchar();
getchar();
}

if é uma palavra inglesa que em português significa "se".
Nesse caso, se colocarmos uma idade maior que 30, o programa dirá que você é velho, senão, ele simplesmente se encerarrá.

if(condição){
comando1
comando2
.
.
}

a estrutura de if é assim, acompanhada de parenteses com dentro dos parenteses a condição, depois abre chaves, que indica que você comecará a colocar os comandos se essa condição for verdadeirae fechamos a chave para indicar que acabamos com os comandos.

mais um exemplo:

include<studio.h>
int main(void)
{
int a,b;
printf("informe um numero: ");
scanf("%i",&a);
printf("informe outro numero: ");
scanf("%i",&b);
if(a+b>0){
printf("a soma de %i e %i é maior que 0",a,b);
}
getchar();
getchar();
}

estrutura condicionais compostas:

agora, além do if, conheceremos o else, que significa senão, ou seja, se if condição não for verdadeira, ele executará o comando else.

vamos a um exemplo:

#include<stdio.h>
int main(void)
{
int idade;
printf("digite a sua idade: ");
scanf("%i",&idade);
if(idade>30){
printf("você é velho");
}
else{
printf("você é novo");
}
getchar();
getchar();
}

ou seja, se idade não for maior que 30, ele pulará para a estrutura do else, que dirá que você é novo..
resumidamente:

"SE" condição for verdadeira faça isso, "SENÃO", faça isso.

vamos fazer exercícios?

1) Escreva um programa que receba uma temperatura em celsius e "se" for maior que 30 graus dizer que está calor, "senão", dizer que está frio.

até mais!

sábado, 30 de janeiro de 2010

Leitura e escrita de valores.

Continuando a ultima parte, vamos a seguinte situação.
No programa da sorveteria que fizemos, nós atribuimos valores para a quantidade e o valor de cada sorvete. Porém, e se o usuário quisesse indicar esses valores e o programador não o soubesse? Isso seria um problema, porém, vamos conhecer a função que efetua a leitura de valores através do teclado.

Essa função é a função scanf.

suponhamos que tenhamos criado a variável a. como nesse ex:

int a;

e agora o usuário (e não o programador) queira atribuir um valor a essa variavel "a".
Para fazermos isso, utilizaremos a função scanf que funciona desse modo:

scanf("%d",&a);


obs importante: para usuários windows, quando utilizarem a função scanf, não importa o número de vezes que usarem, coloquem 2 getchar(); ao invés de apenas 1, como estavamos fazendo.

você deve estar se perguntando, mas o que é %d?
%d indica que estamos querendo ler um número Decimal, como o próprio "d" já diz.
Após isso, fechamos as aspas e colocamos um virgula e agora, indicaremos que a variável que receberá esse valor lido do teclado, é a variavel "a".
Para isso escrevemos &a indicando que o valor lido do teclado, irá ser armazenado no endereço (por isso o uso do &) de onde a variável "a" se localiza.

de modo análogo, se quisessemos ler um número real do teclado, utilizariamos %f que indica número de ponto flutuante. como no ex:

float b;

scanf("%f",&b);

Ou seja, caso quisessemos ler 5 números inteiros, fariamos:

int a;
int b;
int c;
int d;
int e;

scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
scanf("%d",&d);
scanf("%d",&e);

certo? simm, certo, porém, a funçao scanf tem alguns truques para facilitar a nossa vida.

ao invés de 5 scanfs. poderiamos utilizar:

scanf("%d %d %d %d %d",&a,&b,&c,&d,&e);


Isso faria a leitura de 5 números inteiros do teclado.
Outro macete que podemos utilizar é ao invés de escrevemos:

int a;
int b;
int c;
e assim por diante..

escrevermos:

int a,b,c;

isso concerteza diminuirá o número de linhas do seu código e até pode facilitar o entendimento.

Agora, como imprimir o valor dessas variáveis na tela?

Para isso, utilizaremos a nossa conhecida função printf.

Similar a função scanf, podemos escrever:

printf("%d", a);

veja que, a única diferença é que não utilizamos o &, como na função scanf.
Como na função scanf, podemos escrever:

printf("%d %d %d %d %d",a,b,c,d,e);

isso imprimirá o valor das variaveis a,b,c,d,e na tela.
Além disso, você pode normalmente continuar escrevendo textos na função printf, como no exemplo:

printf("variavel a=%d variavel b=%d variavel c=%d variavel d=%d variavel e=%d",a,b,c,d,e);

Após o entendimento total dos métodos de leitura e escrita, acredito que já consigam criar programinhas para solucionarem algum tipo de problema.

Agora, tente por criar um programinha que resolva o seguinte problema:

1) Faça um programa que leia 3 números inteiros e calculo a multiplicacao deles.
2) Resolva o problema do sorvete proposto no tutorial passado de forma que a quantidade e o valor de cada sorvete seja dado pelo usuário.

até mais.

sexta-feira, 29 de janeiro de 2010

Variáveis

Supondo que temos a seguinte operação:

c=a+b+10

dado que a=5 e b=5.

simples, certo? a conta ficaria:

c=5+5+10
c=20

Pois é bem assim que a coisa funciona em programação.
Como na matemática, podemos criar variáveis que armazenam valores e podem efetuar determinado cálculo para nós.
Apenas uma diferença:

c=a*b;

No dia-a-dia, geralmente utilizamos o ponto para denotarmos multiplicação, porém, em programação, utilizamos o símbolo *

c=a/b;

indica divisao.

c=a+b;

indica soma.

c=a-b;

indica subtração.


Por ora, vamos conversar sobre alguns tipos de variáveis.

Variáveis do tipo int:

Variáveis do tipo int, como o próprio nome já diz, são utilizadas para armazenar valores do tipo inteiro.

como por exemplo:

int a= 5;

nessa declaração, estamos atribuindo a variável "a", o valor 5.
Simples, não?
Agora você poderia estar se perguntando, o que aconteceria se eu colocasse:

int a=5.5;

Antes de eu dizer, só um pequeno detalhe, na computação, quando estamos escrevendo números "quebrados", ao invés da vírgula que estamos acostumados a utilizar no dia-a-dia , utilizamos o ponto. ex: ao invés de escrevermos 5,5 .. escrevemos 5.5

continuando..

o que aconteceria se colocassemos:
int a=5.5;

bom, nesse caso, a própria linguagem C, o número seria truncado, ou seja, a parte fracionaria seria jogada fora, no caso, 0.5 seria ignorado e o variável "a" assumiria o valor 5.

resumindo..
int a=5.5;

acarretaria na mesma declaração que
int a=5;

pois a parte quebrada do número no primeiro caso seria ignorada.

Variáveis do tipo float:

As variáveis do tipo float, conhecidas como variáveis de ponto flutuante, nada mais é que as variáveis que armazenam números reais.
ou seja, se quisessemos armazenar o 5.5, usariamos uma variável do tipo float. ex:

float a= 5.5;
float b= 10.333;


Vamos a um breve treinamento:

Suponha que Alice, tenha uma sorveteria e cada sorvete com 1 bola custe R$1.00 real e sorvetes com 2 bolas custem R$1,50.
Pedro, que gosta muito de sorvete, foi até a sorveteria e comprou 5 sorvetes com 1 bola e 3 sorvetes com 2 bolas. Quanto Pedro gastou?

Olhando para os dados, podemos facilmente determinar de "cabeça" quanto Pedro gastou, porém, vamos fazer um código em C para resolver esse problema.

Porém, antes de resolvermos, vamos aprender uma coisinha:

Geralmente, criamos códigos com centanas de milhares de linhas e para não nos perdermos no código ou para facilitarmos o compreendimento do código por outra pessoa, nós utilizamos os famosos comentários.
Um comentários se inicializa por /* e se finaliza por */
Vamos a um exemplo para ficar mais claro:

#include<stdio.h>

int main(void){

/* Esse é um código na linguagem C */

printf("Código com comentarios\n");

getchar();
return 0;
}

Se vocês tentarem executar esse código, perceberam que o que está escrito dentro de /* */ foi ignorado pelo seu programa e apenas a linha "Codigo com comentarios" foi impressa.
Ou seja, podemos utilizar esses comentários para descrevermos o que estamos fazendo em uma determinada parte do código.

Mas bom, voltando ao problema da sorveteria, vamos solucioná-lo.

#include<stdio.h>

int main(void){

int umabola=1; /* Preço do sorvete de uma bola */
float duasbolas=1.5; /* Preço do sorvete de duas bolas. */

/*Veja que utilizamos uma variável do tipo int e outra do tipo float, pois o preço do sorvete de 1 bola era um numero inteiro.. e o de duas bolas era um número real. */

int quantidadeumabola= 5; /* Quantidade comprada do sorvete de uma bola */
int quantidadeduasbolas= 3; /*Quantidade comprada do sorvete de duas bolas */
float precototal; /*variavel criada para armazenar o preco total pago por Pedro */

/* Veja que não inizializamos a variavel precototal, pois ainda não sabemos o preço que Pedro gastou.. Agora.. Como fariamos em matemática, escrevemos: */

precototal= quantidadeumabola*umabola + quantidadeduasbolas*duasbolas;

/* Simples, não? Multiplicamos a quantidade de sorvetes de uma bola pelo preço do sorvete de uma bola e somamos com a quantidade de sorvetes de duas bolas multiplicada com o preço do sorvete de duas bolas */

/*Após esse calculo, o valor 9.5 (que é o preco que Pedro pagou) foi armazenado na variavel precototal */

getchar();
return 0;
}

Agora você deve estar se perguntando.. "Mas como eu faço pra imprimir esse valor na tela?"

No próximo mini tutorial estarei demonstrando como se realizamos a escrita e a leitura de valores na tela.

até mais.

quinta-feira, 28 de janeiro de 2010

Bom, acredito que me apresentar e me conhecerem não foi o motivo de terem vindo a esse blog, então, vamos por a mão na massa ;p

Primeiramente, tentarei escrever mini-aulas sobre a linguagem de programação C.
Existem diversas outras linguagens de programação, como C++, Python, Java, Cobol e por ai vai, porém, acredito que para iniciarmos, a linguagem C seja a mais utilizada nos meios acadêmicos.

Para começarmos, para os utilizadores do windows, sugiro baixarem o famoso Dev-C++ através desse link: http://www.baixaki.com.br/download/dev-c-.htm
E para os que utilizam linux, abram o terminal, e baixem o pacote g++ com o comando: apt-get install g++
Após baixarem pelo apt-get, sugiro também o download do programa Emacs, acredito que um apt-get install emacs também resolva o problema.


Windows: Com o dev-c++ aberto, pressiona ctrl+n ou vá no menu Arquivo/Novo/Arquivo Fonte.
Linux: Com o emacs, pressione ctrl+x + ctrl+f e digite o nome do programa, pressione enter e vamos começar.

Após isso, digitem o seguinte código:

#include<stdio.h>

int main(void){

printf("voce esta programando");

return 0;
}


A primeira linha: #include<stdio.h> é o que chamamos de adicionando uma "biblioteca", no caso da biblioteca stdio.h, dentro dela contém funções necessárias para rodarmos um programa simples, como leitura e escrita de valores na tela, entre outras funções importantes.

A segunda linha: int main(void){ é onde o nosso programa começa.
Veja que, precisamos seguir a sintaxe corretamente, nunca se esqueçam de colocar "{" após o int main(void)

terceira linha: printf("voce esta programando"); é aqui onde ocorre a escrita desse texto na tela, a função printf tem esse papel, escrever alguma coisa na tela.
No caso, estamos escrevendo voce esta programando. A função printf tem essa sintaxe:
printf("texto");
Novamente, prestem bem atenção na sintaxe, veja que o texto que você está escrevendo tem que estar rodeado por chaves e nunca se esqueçam do ponto e virgula.

quarta linha: return 0; não é interessante para nós por enquanto.

quinta linha: } se lembrarem, tinhamos escrito int main(void){ assinalando que estavamos iniciando o nosso programa, então, apenas fechamos as chaves, assinalando que estamos terminando o nosso programa.

Caso você esteja usando o dev-c++, pressione F9 e veja o que acontece..
segundos depois..

"Ah, uma janelinha abriu rapidamente e sumiu... =(("

Sim, isso mesmo. Isso acontece pois o terminal do windows abriu, executou seu programa, imprimiu o texto, mesmo que super rapidamente e você não tenha visto e como a execução do seu programa terminou, a janelinha também se fechou.
Para evitarmos isso, adicionaremos em cima do comando return(0); o comando:
getchar();

ficando o código desse modo:

#include<stdio.h>

int main(void){

printf("voce esta programando");

getchar();
return 0;
}

A função getchar(); faz com que o computador fique esperando o usuário pressionar um enter ou digitar alguma coisa, assim, podemos manter a janelinha ativa, até que pressionemos alguma tecla como o enter.
Usuários linux não precisam do comando getchar(); pois seu terminal é fixo.
Caso esteja usando linux e queira executar seu programa, vá no terminal e digite:
gcc nomedoprogramaquevoceescolheu.c
./a.out

Obs: caso tenha aparecido alguma mensagem de erro quando você pressionou F9 no dev-c++ ou digitou gcc nomedoprogramaquevoceescolheu.c verifiquem novamente o código pois vocês devem ter digitado alguma coisa errada, ou esqueceram alguma coisa.


Bom, espero que todos tenham conseguido passar para essa segunda parte, vamos a outra programinha simples:

#include<stdio.h>

int main(void){

printf("oi tudo bem?\n");
printf("uhnn.. talvez");

getchar();
return(0);

}

Bem similar ao anterior, não?
Estamos chamando a função printf duas vezes, na primeira, imprimimos:
oi tudo bem?

Uma observação fica por conta desse \n que utilizamos, veja que ele não apareceu na saída, isso acontece pois quando utilizamos \n, estamos sinalizando para pular uma linha. Agora, no segundo printf, escrevemos na tela:
uhnn.. talvez

ficando:
oi tudo bem?
uhn.. talvez

veja que, caso não tivemos colocado o \n como nesse ex:

printf("oi tudo bem?");
printf("uhn..talvez");

a saída seria:

oi tudobem?uhn..talvez

por isso a importância do \n

até a próxima.