segunda-feira, 1 de fevereiro de 2010

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!