Como calcular a sequência de fibonacci? E qual o critério de parada para que, quando chegar em um milhão ele retornar o próximo acima desse valor?
RESOLVENDO...
#include <stdio.h>
#include <conio.h>//bibliotecas
int main()
{
int x=0, y, z=1;//variaveis
int k=1000000;
do
{
y = x+z;
x = z;
z = y;
if(x>k){//se o termo da sequencia e que k, ele mostra na tela e sai do laco while
printf("\nO primeiro numero da sequencia de fibonacci apos %d e %d",k, x);
}
}while(x<=k);//enquanto x nao chega em k, o laco nao para de calcular a sequencia
getch();//pausa pra ler
return 1;
}
SE DER COMENTE!!
Blog criado como meio de debate para questões sobre Linguagens de Programação C e C++, Matemática, matérias específicas dos cursos, Engenharia Elétrica e Ciências da Computação. Todos os tópicos pertinentes são bem vindos! Enjoy!
sábado, 11 de junho de 2011
CONTANDO O NÚMERO DE VEZES QUE UMA PALAVRA APARECE EM UM ARQUIVO
Como saber quantas vezes uma certa palavra apareceu no arquivo???
Bem pode-se pensar de dois jeitos.
Primeiro: Cada palavra esta em um linha do arquivo! (jeito bem simples de fazer, pensar!)
Segundo: Tudo bagunçado(jeito mais hard de fazer, exige maior lógica)
RESOLVENDO....
PRIMEIRO :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
int main()
{
FILE *arq;
char name[15], test[15], aux[15];
int i, cont=0;
printf("\nDIGITE O NOME DO ARQUIVO\n");
gets_s(name);
arq=fopen(name,"r");
if(!arq)
{
printf("ERRO AO ABRIR O ARQUIVO");
getch();
exit (1);
}
printf("\nDIGITE A PALAVRA QUE DESEJAR\n");
gets_s(test);
while(!feof(arq))
{
fscanf(arq,"%s", &aux);
if(strcmp(test,aux)==0)
cont++;
}
printf("\nA PALAVRA %s SE REPETIU %d vezes",test, cont);
getch();
return 1;
}
OUTRO JEITO: CONTANDO LETRA POR LETRA
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
int ler(char *nome);
int main()
{
int npalavras=0;
char nome[15];
printf("\n\nDigite o nome do arquivo\n");
fflush(stdin);
gets(nome);
npalavras=ler(nome);//CHAMA A FUNCÇAO LER
printf("\nExite %d palavras", npalavras);
getch();
return 1;
}
int ler(char *nome)//funcao que le todo arquivo e recebe com parametro um string com o nome do arquivo
{
FILE *p;//ponteiro pra arquivo
char test[15], c;
int i=0, j=0, cont=0,xis=0,tam;
p=fopen(nome, "r");//abrindo arquivo
if(!p)
{
printf("\nERRO: ARQUIVO NAO EXISTE OU PODE ESTAR CORROMPIDO!! ");
getch();
exit (1);
}
printf("\n\nDigite a palavra\n\n");
fflush(stdin);
gets(test);
tam=strlen(test);//contando o tamanho da palavra
while((c=getc(p))!=EOF)//le ate o fim do arquivo
{
if(c=='\n')//caso tenha uma quebra de linha, nao é contado
xis=0;
else{
if(c==test[i])
{
i++;//enquanto a letras da palavra desejada e do arquivo forem batendo... vai incrementando o i
xis=1;
}
else
{
i=0;//caso mude, i==0
xis=0;}
if(xis==1 && i==tam){//se, sempre for iguais as letras e chegar no tamanha da palavra... conta uma!
cont++;
i=0;}}
}
fclose(p);//fecha o arquivo
return cont;//retorna o numero de palavras
}
//COMENTEM!!!
Bem pode-se pensar de dois jeitos.
Primeiro: Cada palavra esta em um linha do arquivo! (jeito bem simples de fazer, pensar!)
Segundo: Tudo bagunçado(jeito mais hard de fazer, exige maior lógica)
RESOLVENDO....
PRIMEIRO :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
int main()
{
FILE *arq;
char name[15], test[15], aux[15];
int i, cont=0;
printf("\nDIGITE O NOME DO ARQUIVO\n");
gets_s(name);
arq=fopen(name,"r");
if(!arq)
{
printf("ERRO AO ABRIR O ARQUIVO");
getch();
exit (1);
}
printf("\nDIGITE A PALAVRA QUE DESEJAR\n");
gets_s(test);
while(!feof(arq))
{
fscanf(arq,"%s", &aux);
if(strcmp(test,aux)==0)
cont++;
}
printf("\nA PALAVRA %s SE REPETIU %d vezes",test, cont);
getch();
return 1;
}
OUTRO JEITO: CONTANDO LETRA POR LETRA
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
int ler(char *nome);
int main()
{
int npalavras=0;
char nome[15];
printf("\n\nDigite o nome do arquivo\n");
fflush(stdin);
gets(nome);
npalavras=ler(nome);//CHAMA A FUNCÇAO LER
printf("\nExite %d palavras", npalavras);
getch();
return 1;
}
int ler(char *nome)//funcao que le todo arquivo e recebe com parametro um string com o nome do arquivo
{
FILE *p;//ponteiro pra arquivo
char test[15], c;
int i=0, j=0, cont=0,xis=0,tam;
p=fopen(nome, "r");//abrindo arquivo
if(!p)
{
printf("\nERRO: ARQUIVO NAO EXISTE OU PODE ESTAR CORROMPIDO!! ");
getch();
exit (1);
}
printf("\n\nDigite a palavra\n\n");
fflush(stdin);
gets(test);
tam=strlen(test);//contando o tamanho da palavra
while((c=getc(p))!=EOF)//le ate o fim do arquivo
{
if(c=='\n')//caso tenha uma quebra de linha, nao é contado
xis=0;
else{
if(c==test[i])
{
i++;//enquanto a letras da palavra desejada e do arquivo forem batendo... vai incrementando o i
xis=1;
}
else
{
i=0;//caso mude, i==0
xis=0;}
if(xis==1 && i==tam){//se, sempre for iguais as letras e chegar no tamanha da palavra... conta uma!
cont++;
i=0;}}
}
fclose(p);//fecha o arquivo
return cont;//retorna o numero de palavras
}
//COMENTEM!!!
quinta-feira, 2 de junho de 2011
OBTENDO UM CONJUNTO DE 5 DÍGITOS NA SEQUÊNCIA ABAIXO QUE GERA O MAIOR PRODUTO
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
1º passo- entender o problema, ou seja
vou pegar uma sequencia de 5 digitos, ex: 73167, achar o produto 7x3x1x6x7 = 882
e assim por diante pegando outras sequencias seguidas.... 31671 -> 3x1x6x7x1=126 ....
2º passo- gerar o codigo
Resolvendo:
P.S.: Criei um arquivo que ja tem toda sequencia, então e so você baixar o arquivo e colocar na pasta do projeto criado e assim compilar o programa, se você observar o arquivo esta abrindo "r" ou seja somente pra leitura, deixarei disponível pra quem quiser o arquivo logo abaixo do código pra fazer download!!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
FILE *p;//ponteiro para meu arquivo
int vet[1000],prd=1, i,k=5;
int n=0,aux, cont=0;
p=fopen("test.txt", "r");//abrindo meu arquivo
if(!p)
{
printf("\n\nERRO AO ABRIR O ARQUIVO\n\n");
getch();
exit (1);
}
for( i=0; i<1000;i++)//lendo todo arquivo, e preenxendo meu vetor com inteiros que se encontram em cada linha
{
fscanf(p, "%d", &vet[i]);
}
while(n!=996)//como temos 1000 posicoes entao, temos que fazer o produto da posicao 296..7..8..9..1000
{
aux=prd;
prd=1;
for(i=cont; i<k;i++)//for pra percorrer o intervalo de posicoes
{
prd*=vet[i];//calculando o produto da posicoes
}
if(aux>prd)//caso encontre um maior armazena em uma variavel aux para ver se encontra outra
prd=aux;
cont++;
n++;
k++;
}
cont=0;
for( i=0; i<1000;i++){//imprime na tela meu vetor em forma de matriz
printf("%d ", vet[i]);
cont++;
if(cont ==20){
printf("\n");
cont=0;
}
}
printf("\n\nO MAIOR PRODUTO ENCONTRADO NA SEQUENCIA ACIMA FOI: %d\n",prd);
getch();
return 1;
}
ARQUIVO .TXT
P.S: Voce deve colar esse arquivo na pasta do projeto, //meus documentos// visual 2008 ou 2010// a pasta que voce criou para o projeto// dentro da pasta tem outra pasta com o mesmo nome do seu projeto, abra ela e cole o arquivo dentro dessa pasta!!!
AI PESSOAL, COMO TO COM UM TEMPINHO SOBRANDO E ESSE EXERCICIO E BEM INTERESSANTE, RESOLVI FAZE-LO DE OUTRA FORMA, APENAS COPIEI ESSA SEQUENCIA NUMERICA E COLEI NO MEU ARQUIVO, PRA QUEM BAIXAR OS DOIS ARQUIVOS PODE COMPARAR E VER QUE O FORMATO DOS ARQUIVOS ESTAO COMPLETAMENTE DIFERENTES, UM COLOQUEI CADA NUMERO EM UMA LINHA E O OUTRO FICOU IGUAL A SEQUENCIA VISTA LOGO ACIMA! LEMBRE-SE AO BAIXAR O ARQUIVO COLE-O NA MESMA PASTA QUE INDIQUEI ACIMA!!!
RESOLVENDO!!!
#include <stdio.h>
#include <conio.h>//BIBLIOTECAS
#include<string.h>
#include<stdlib.h>
int main()
{
FILE *p;//ponteiro pra arquivo
int vet[1000], i=0;//array e variaveis
int cont=0, n=0, aux, prd=1, k=5;
char c;
p=fopen("teste.txt", "r");//abrindo arquivo
if(!p)
{
printf("\n**ERRO AO ABRIR O ARQUIVO, CERTIFIQUE-SE QUE O ARQUIVO EXISTE!!!!!!");
getch();//pausa para o usuario ler a mensagem de erro
exit (1);//sai do programa!!!
}
while((c=getc(p)) !=EOF)//lendo o arquivo ate chegar no fim
{
vet[i]=c-'0';//'0'equivale a 48, serve para qualquer codigo que seje ou nao na tabela padrão ASCII
i++;
if(c=='\n')
i--;}//caso ele leia um enter no arquivo, ua quebra de linha, pra nao perder a posicao decremento o n!
while(n!=996)//como temos 1000 posicoes entao, temos que fazer o produto da posicao 296..7..8..9..1000
{
aux=prd;
prd=1;
for(i=cont; i<k;i++)//for pra percorrer o intervalo de posicoes
prd*=vet[i];//calculando o produto da posicoes
if(aux>prd)//caso encontre um maior armazena em uma variavel aux para ver se encontra outra
prd=aux;
cont++;
n++;
k++;
}
cont=0;
for( i=0; i<1000;i++){//imprime na tela meu vetor em forma de matriz
printf("%d ", vet[i]);
cont++;
if(cont ==20){
printf("\n");
cont=0;
}
}
printf("\n\nO MAIOR PRODUTO ENCONTRADO NA SEQUENCIA ACIMA FOI: %d\n",prd);
getch();
return 1;
}
//COMENTEM SEMPRE, OBRIGADO!!!
O ARQUIVO QUE VOCE DEVE COLAR NA PASTA DO PROJETO SEGUE NO LINK ABAIXO!!!!
ARQUIVO PARA PROJETO
Qualquer dúvida, entre em contato!!! COMENTEM
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
1º passo- entender o problema, ou seja
vou pegar uma sequencia de 5 digitos, ex: 73167, achar o produto 7x3x1x6x7 = 882
e assim por diante pegando outras sequencias seguidas.... 31671 -> 3x1x6x7x1=126 ....
2º passo- gerar o codigo
Resolvendo:
P.S.: Criei um arquivo que ja tem toda sequencia, então e so você baixar o arquivo e colocar na pasta do projeto criado e assim compilar o programa, se você observar o arquivo esta abrindo "r" ou seja somente pra leitura, deixarei disponível pra quem quiser o arquivo logo abaixo do código pra fazer download!!
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main()
{
FILE *p;//ponteiro para meu arquivo
int vet[1000],prd=1, i,k=5;
int n=0,aux, cont=0;
p=fopen("test.txt", "r");//abrindo meu arquivo
if(!p)
{
printf("\n\nERRO AO ABRIR O ARQUIVO\n\n");
getch();
exit (1);
}
for( i=0; i<1000;i++)//lendo todo arquivo, e preenxendo meu vetor com inteiros que se encontram em cada linha
{
fscanf(p, "%d", &vet[i]);
}
while(n!=996)//como temos 1000 posicoes entao, temos que fazer o produto da posicao 296..7..8..9..1000
{
aux=prd;
prd=1;
for(i=cont; i<k;i++)//for pra percorrer o intervalo de posicoes
{
prd*=vet[i];//calculando o produto da posicoes
}
if(aux>prd)//caso encontre um maior armazena em uma variavel aux para ver se encontra outra
prd=aux;
cont++;
n++;
k++;
}
cont=0;
for( i=0; i<1000;i++){//imprime na tela meu vetor em forma de matriz
printf("%d ", vet[i]);
cont++;
if(cont ==20){
printf("\n");
cont=0;
}
}
printf("\n\nO MAIOR PRODUTO ENCONTRADO NA SEQUENCIA ACIMA FOI: %d\n",prd);
getch();
return 1;
}
ARQUIVO .TXT
P.S: Voce deve colar esse arquivo na pasta do projeto, //meus documentos// visual 2008 ou 2010// a pasta que voce criou para o projeto// dentro da pasta tem outra pasta com o mesmo nome do seu projeto, abra ela e cole o arquivo dentro dessa pasta!!!
AI PESSOAL, COMO TO COM UM TEMPINHO SOBRANDO E ESSE EXERCICIO E BEM INTERESSANTE, RESOLVI FAZE-LO DE OUTRA FORMA, APENAS COPIEI ESSA SEQUENCIA NUMERICA E COLEI NO MEU ARQUIVO, PRA QUEM BAIXAR OS DOIS ARQUIVOS PODE COMPARAR E VER QUE O FORMATO DOS ARQUIVOS ESTAO COMPLETAMENTE DIFERENTES, UM COLOQUEI CADA NUMERO EM UMA LINHA E O OUTRO FICOU IGUAL A SEQUENCIA VISTA LOGO ACIMA! LEMBRE-SE AO BAIXAR O ARQUIVO COLE-O NA MESMA PASTA QUE INDIQUEI ACIMA!!!
RESOLVENDO!!!
#include <stdio.h>
#include <conio.h>//BIBLIOTECAS
#include<string.h>
#include<stdlib.h>
int main()
{
FILE *p;//ponteiro pra arquivo
int vet[1000], i=0;//array e variaveis
int cont=0, n=0, aux, prd=1, k=5;
char c;
p=fopen("teste.txt", "r");//abrindo arquivo
if(!p)
{
printf("\n**ERRO AO ABRIR O ARQUIVO, CERTIFIQUE-SE QUE O ARQUIVO EXISTE!!!!!!");
getch();//pausa para o usuario ler a mensagem de erro
exit (1);//sai do programa!!!
}
while((c=getc(p)) !=EOF)//lendo o arquivo ate chegar no fim
{
vet[i]=c-'0';//'0'equivale a 48, serve para qualquer codigo que seje ou nao na tabela padrão ASCII
i++;
if(c=='\n')
i--;}//caso ele leia um enter no arquivo, ua quebra de linha, pra nao perder a posicao decremento o n!
while(n!=996)//como temos 1000 posicoes entao, temos que fazer o produto da posicao 296..7..8..9..1000
{
aux=prd;
prd=1;
for(i=cont; i<k;i++)//for pra percorrer o intervalo de posicoes
prd*=vet[i];//calculando o produto da posicoes
if(aux>prd)//caso encontre um maior armazena em uma variavel aux para ver se encontra outra
prd=aux;
cont++;
n++;
k++;
}
cont=0;
for( i=0; i<1000;i++){//imprime na tela meu vetor em forma de matriz
printf("%d ", vet[i]);
cont++;
if(cont ==20){
printf("\n");
cont=0;
}
}
printf("\n\nO MAIOR PRODUTO ENCONTRADO NA SEQUENCIA ACIMA FOI: %d\n",prd);
getch();
return 1;
}
//COMENTEM SEMPRE, OBRIGADO!!!
O ARQUIVO QUE VOCE DEVE COLAR NA PASTA DO PROJETO SEGUE NO LINK ABAIXO!!!!
ARQUIVO PARA PROJETO
Qualquer dúvida, entre em contato!!! COMENTEM
CONTANDO O NUMERO DE LINHA DE UM ARQUIVO E C
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
int main(){
FILE *arq;//ponteiro para meu arquivo
int i, cont =0;//contador de linhas
printf("\n\n\n\n");
arq = fopen("TESTE.txt", "r");//abrindo meu arquivo somente pra leitura, lembre-se o arquivo deve existir
if(!arq)
{
printf("\nERRO\n");//caso der erro ele nao abre o arq e mostra a mensagem de erro
getch();
exit (1);//sai do programa
}
while((i=getc(arq)) != EOF){// le o arquivo ate o final
if(i=='\n')//a cada quebra de linha ele incrementa o contador
cont++;}
if(cont != 0)//caso o arquivo possua linhas o contador recebe +1 porque começo com 0
cont++;
printf("\nQuantidade de linhas desse arquivo e %d", cont);
fclose(arq);//fecha o arquivo
getch();
return 1;
}
//COMENTEM SEMPRE!!! VLW, FLW
#include <conio.h>
#include <stdlib.h>
int main(){
FILE *arq;//ponteiro para meu arquivo
int i, cont =0;//contador de linhas
printf("\n\n\n\n");
arq = fopen("TESTE.txt", "r");//abrindo meu arquivo somente pra leitura, lembre-se o arquivo deve existir
if(!arq)
{
printf("\nERRO\n");//caso der erro ele nao abre o arq e mostra a mensagem de erro
getch();
exit (1);//sai do programa
}
while((i=getc(arq)) != EOF){// le o arquivo ate o final
if(i=='\n')//a cada quebra de linha ele incrementa o contador
cont++;}
if(cont != 0)//caso o arquivo possua linhas o contador recebe +1 porque começo com 0
cont++;
printf("\nQuantidade de linhas desse arquivo e %d", cont);
fclose(arq);//fecha o arquivo
getch();
return 1;
}
//COMENTEM SEMPRE!!! VLW, FLW
Assinar:
Postagens (Atom)