quinta-feira, 30 de junho de 2011

SEQUÊNCIA DE FIBONACCI

A Sequência de Fibonacci consiste em uma sucessão de números, tais que, definindo os dois primeiros números da sequência como 0 e 1, os números seguintes serão obtidos por meio da soma dos seus dois antecessores. Portanto, os números são: 0,1,1,2,3,5,8,13,21,34,55,89,144,233...

Como fazer essa sequência usando linguagem de programação C?
Logo abaixo segue a função interativa de fibonacci:




 //bibliotecas
#include <stdio.h>
#include <conio.h>

int main()
{
int N;//variaveis
unsigned int x = 0, y = 1,z;//inteiros acima de 0
printf("Escolha o numero de casas que quer ver na tela da sequencia \n");
scanf("%d",&N);
printf("A sequencia de Fibonacci ate a casa de numero %d e: \n",N);
for(int i = 0; i < N; i++)//for pra calcular toda a sequencia e fazer a soma do pares
{
z = x+y;
x = y;
y = z;
printf("%d\n",z);

}
getch();
return 0;
}



FAZENDO A MESMA SEQUÊNCIA AGORA USANDO FUNÇÃO RECURSIVA:


int fibo(int n)
{
          if(n ==1 || n == 2)
                return 1;
          else
                return fibo(n-1)+fibo(n-2);
}


nao esqueça de sempre comentar em seus códigos e também separa-lo em modulos!
P.S: não esqueça de dar um up ai!! FLW

terça-feira, 28 de junho de 2011

CONFERINDO UMA MATRIZ SUDOKU

Como conferir se uma matriz de sudoku esta certa?
Bem, matriz Sudoku é aquela onde o mesmo número não se repete na mesma linha e nem na mesma coluna!

RESOLVENDO:


#include<stdio.h>
#include<conio.h>

int mat[9][9];
int num=9;
void preencher();
int conflinha();
int confcol();
int main()
{
preencher();//preenche a matriz
if(conflinha() ==1 && confcol() ==1)//se o retorno da funcao for igual a 1.... a matriz esta correta
printf("\n**PARABENS**");
else//senao...
printf("\nERRADO");


getch();//pause para ler, equivalente ao system("pause")
return 1;
}

void preencher()//preenche linha por linha
{
int i, j,x;
for(i=0; i<num; i++)
for(j=0; j<num; j++)
{
printf("\nPosicao [%d][%d]: ", i+1, j+1);
scanf("%d",& x);
if(x<0 || x>9){//como aceita-se apenas numero naturais, entre 0 e 9....
printf("Apenas numeros naturais, entre 0 e 9");
j--;
continue;}
else
mat[i][j]=x;

}
}
int conflinha()//confere linha por linha
{
int x=0,j,soma=0, i=0;
while(i<num)//o laco while vai ate a ultima linha
{
for(j=0; j<num;j++)
if(mat[i][x] == mat[i][j] && x!=j)//confere o elemento com os demais da linha
soma+=1;
x++;
if(x==num)//muda de coluna
{
i++;
x=0;
}

}
if(soma==0)//como inicio-se soma =0, se for diferente e que tem elementos iguais, senao... ok
return 1;
else
return 0;
}

int confcol()//faz o mesmo que a funcao conflinha faz, so que confere colunas
{
int x=0,j,soma=0, i=0;
while(i<num)
{
for(j=0; j<num;j++)
if(mat[x][i] == mat[i][j] && j!=x)
soma+=1;
x++;
if(x==num)
{
i++;
x=0;
}

}
if(soma==0)
return 1;
else
return 0;

}


Comentem!!!

terça-feira, 14 de junho de 2011

CALCULANDO O SENO USANDO A SÉRIE DE TAYLOR

sin(x)= x+ (-1x^3/3!)+ (1x^5/5!)+...... (1x^(2n+1)/(2n+1)!)


onde x é o valor do ângulo em radianos. Considerar pi = 3.141593
e n é a precisao!

O usuario ira informar o angulo em graus, ou seja voce deve passar esse angulo para radianos...

RESOLVENDO:



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

#define Pi 3.141593
int conf(float graus);
float pasrad(float *graus);
float expo(int n);
float fatorial(int *fat);
float calculox(float x, int *epx);

int main()
{
int cond=0,epx=2, fat=2, n=1;
double cf, aux;
float x,graus, cx,sin;
printf("\nEntre com o valor do angulo\n");
scanf("%f",&graus);
x=pasrad(&graus);
sin=x;
do
{


cf=fatorial(&fat);
aux=expo(n);
cx=calculox(x,&epx);
sin+=((aux*cx)/cf);

n++;
cond++;
}while(cond!=4);
sin=sin*(conf(graus));
printf("\nO valor do seno e: %f \n", sin);
getch();
return 1;
}

float pasrad(float *graus)//passa de graus para radianos
{
int aux;
if(*graus>360){//caso tenha dado mais de uma volta no circulo, calcula-se onde parou-se
*graus=*graus/360;
aux=*graus;//pego somente a parte inteira do numero de voltas
*graus=*graus-aux;
*graus*=360;//calcula a quantidade a mais que girou o circulo
}
if(*graus >90 &&*graus <=180)
*graus=180-*graus;
else if(*graus >180 &&*graus <=270)
*graus=*graus-180;
else if(*graus >270 &&*graus <=360)
*graus=360-*graus;
float rad;
rad=(*graus*Pi)/180;
return rad;

}
float expo(int n)//calcula o sinal do termo
{

int fator=1, i=0;
while(i!=n){
fator*=-1;
i++;
}
return fator;

}

float fatorial(int *fat)//calcula fatorial do denominador da serie
{

int cf=1,i,cont;
cont=*fat+1;
for(i=1;i<=cont;i++)
cf*=i;
*fat=(2*(*fat));
return cf;
}

float calculox(float x, int *epx)//calcula x(angulo em radianos) elevado a potencia.
{
float prod;
int aux=*epx+1;
prod=pow(x,aux);
*epx=(2*(*epx));
return prod;

}

int conf(float graus)
{
if(graus <=90)
return 1;
else if(graus >90 &&graus <=180)
return 1;
else if(graus >180 &&graus <=270)
return -1;
else if(graus >270 && graus <=360)
return -1;

}

P.S; A PRECISAO VOCE PODE ALMENTA-LA, TUDO DEPENDO DO SEU PC
SER DER, COMENTEM!!!

sábado, 11 de junho de 2011

IMPRIMINDO NUMEROS PRIMOS NA TELA

O problema e: O usuario informa um numero e o programa mostra todos os primos abaixo dele

RESOLVENDO:



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

int main() {

int i, num, cont = 0;
printf("\nDigite um número inteiro e positivo:\n ");
scanf("%d", &num);
num--;//como o programa quer apenas os numeros primos abaixo do N digitado decremento num
do{
for (i = 1; i <= num; i++) {
if (num % i == 0) { //divide  o numero por todos os numeros ate chegar nele
cont++;// caso ele for divisivel e tiver resto 0 incrementa
}
}

if (cont == 2)// se for == 2 é porque ele e divisivel apenas por 2 numeros, por 1 e por ele mesmo, entao é primo
printf("\nO numero %d e primo!\n", num);
cont=0;//cont volta a ser zero para testar um novo numero
num--;//decremento para testar o proximo
}while(num !=0);//enquanto nao chegar em 0 o programa nao para de calcular os primos
getch();
return 0;
}


COMENTEM!!!