Numeros perfeitos – C

25 09 2008

Buenas, aula passada na cadeira de programação o prof pediu o um programa em C que verificasse se um dado numero era perfeito, lembrando que um numero é perfeito se a soma de seus divisores são iguais ao proprio numero ex: 6 = 1+ 2 + 3
segue o programa então:

#include<stdio.h>
/* Criado em:Qua 24/Set/2008 hs 22:13
 Autor: MRSantos mrsantos4@ucs.com */

int perfeito(int n);

int main(int argc, char *argv[])
{
        int x;
        x = atoi(argv[1]);

        system("clear; tput cup 20 40");

        /* ate hoje nao foi encontrada um perfeito impar
         * detalhes em: http://pt.wikipedia.org/wiki/N%C3%BAmero_perfeito
         * */
        if(x % 2 == 1)
        {
                printf("%d nao eh perfeito\n\n", x);
                return 0;
        }

        if(perfeito(x))
        {
                printf("%d eh perfeito\n\n", x);
                return 0;
        }
        else
        {
                printf("%d nao eh perfeito\n\n", x);
                return 0;
        }
        return 0;
}

int perfeito(int n)
{
        int i, soma = 0;

        for(i = 1; i <= n/2; i++)
        {
                if(n % i == 0)
                {
                        soma += i;
                }

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




Enésimo termo da serie de Fibonacci – C

25 09 2008

Boa noite, to na universidade e o prof acabou de pedir o seguinte problema…
faça uma função que receba um inteiro >= 1 e retorne o enésimo termo da serie de finonacci
ex:

fibo(7)
retorno dessa função seria 13:

então segue o algoritmo :)

#include<stdio.h>
/* Criado em:Qua 24/Set/2008 hs 21:31
 Autor: MRSantos mrsantos4@ucs.com */

int main(int argc, char *argv[])
{
        int n;

        system("clear");
        if(argc != 2)
        {
                printf("\n\nUso: %s n\n", argv[0]);
                return -1;
        }

        n = atoi(argv[1]);
        if(n <= 1)
        {
                printf("\n\nValor deve ser maior que 1\n\n");
                return -1;
        }
        printf("\n\nO %d elemento da serie de fibonacci eh %d\n\n", n, fib(n));
        return 0;
}

int fib(int n)
{
        int i, v1 = 1, v2 = 1, soma;

        for (i = 3; i <= n; i += 1)
        {
                soma = v1 + v2;
                v1 = v2;
                v2 = soma;
        }
        return v2;
}




MDC – C

23 09 2008

Um exemplo de programa que mostra o máximo divisor comum entre dois números…
segue meu exemplo em C

#include<stdio.h>
/* Criado em:Ter 22/Set/2008 hs  22:00
 Autor: MRSantos mrsantos4@ucs.com */
int mdc(int x, int y);

int main( int argc, char *argv[] )
{
        int n1, n2;

        if(argc != 3)
        {
                printf("Uso: %s n1 n2\n", argv[0]);
                return -1;
        }
        n1 = atoi(argv[1]);
        n2 = atoi(argv[2]);

        if(n1 == 0 || n2 == 0)
        {
                puts("Os valores não podem ser 0");
                return -1;
        }

        printf("MDC de %d, %d eh %d\n", n1, n2, mdc(n1, n2));
        return 0;
}

int mdc(x, y)
{
        int dividendo, divisor, resto;
        if(x > y)
        {
                dividendo = x;
                divisor = y;
        }
        else
        {
                dividendo = y;
                divisor = x;
        }

        while( dividendo % divisor != 0 )
        {
                resto = dividendo % divisor;
                dividendo = divisor;
                divisor = resto;
        }
        return divisor;
}

Bom pessoal espero que possa ser útil para alguem, abraços e até o próximo…
Marcio





primeiros n primos

23 09 2008

Dando sequencia a série numeros primos, um programa que gera uma sequencia dos primeiros n primos
segue o codigo:

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

/* Criado em:Sex 22/Set/2008 hs 21:23
 Autor: MRSantos mrsantos4@ucs.com */

#define MAX 20 // numero de primos que quero gerar
// prototipo da funcao
int isprimo(int v);

int main()
{
        int count = 1 , primo = 3;

        printf("%d: 2\n", count++);
        while(MAX >= count)
        {
                if(isprimo(primo))
                {
                        printf("%d: %d\n",count,  primo);
                        count++;
                }
                primo+=2;
        }
        return 0;
}

int isprimo(int v)
{
        int i, primo = 1;
        for(i = 3; i <= sqrt(v); i++)
        {
                if(v % i == 0)
                {
                        primo = 0;
                        return primo;
                }
        }
        return primo;
}




Verifica se determinado numero é primo

22 09 2008

Um programa simples pra verificar se um determinado numero é ou não primo, lembrando que um determinado numero é primo se o mesmo for divisível somente por ele mesmo e 1 alias o numero 1 não é
primo e 2 é o único par primo…
exemplos de números primos:
2, 3, 5, 7, 11, 13 etc…
bom chega de papo matemático e segue o programa:

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

/* Criado em:Sex 19/Set/2008 hs 22:23
 Autor: MRSantos mrsantos4@ucs.com */

int primo(int v);

int main(int argc, char *argv[])
{
        int p;
        p = atoi(argv[1]);

        // um help de como usar o programa
        if(argc != 2)
        {
                printf("Uso: %s n\n", argv[0]);
                return -1;
        }

        // 1 nao eh primo...
        if(p <= 1)
        {
                printf("%d nao eh primo...\n", p);
                return -1;
        }

        // dois eh o unico par primo...
        if(p == 2)
        {
                printf("%d eh primo...\n", p);
                return 0;
        }

        if(primo(p))
                printf("%d eh primo...\n", p);
        else
                printf("%d nao primo...\n", p);

       return 0;
}

int primo(int v)
{
        int i, primo = 1;

        // unico par primo eh dois e ele ja testei no main
        if( v % 2 == 0)
        {
                return 0;
        }

        for(i = 3; i <= sqrt(v); i+= 2)
        {
                if(v % i == 0)
                {
                        primo = 0;
                        return primo;
                }
        }
                        return primo;
}

Um exemplo e uso do mesmo:.
compilando o programa:
gcc -o primos primos.c -lm
./primos 5
5 eh primo…

Obs: os valores são passados por parâmetro :)
abraços e até mais
Marcio





Fatorial em C

18 09 2008

Um exemplo de uma função pra calcular o fatorial de um numero…
lembrando o fatorial de 3 e 4 por ex:
3×2x1=6
4×3x2×1=24

nesse código o valor é passado por paramentro no momento da execução do mesmo…
exemplo de uso do mesmo seria em ambiente linux seria:
./fatorial 3
segue o código em C pra realizar essa operação:

#include<stdio.h>
#include<stdlib.h>
/* Criado em:Qui 18/Set/2008 hs 15:55
 Autor: MRSantos mrsantos4@ucs.com */

int fatorial(int n);

int main(int argc, char *argv[])
{
        int fat;

        // vejo se foi passado algum parametro
        if(argc != 2)
        {
                printf("Uso: %s valor\n", argv[0]);
                return -1;
        }

        fat = atoi(argv[1]);

        if(fat < 0)
        {
              puts("Entre com um valor positivo");
              return -1;
        }
              printf("Fatorial de %d eh %d\n", fat, fatorial(fat));

        return 0;
}

int fatorial(int n)
{
        int i, fatorial = 1;
        for(i = 1; i <= n; i++)
        {
                fatorial *= i;
        }

        return fatorial;
}

espero que seja útil :)





Desafios de programação

5 09 2008

Pra quem gosta de desafios em programação essa página é um parque de diversões…
Desafios de Programação
pra poder brincar é necessario fazer um cadastro bem simples…
os algoritmos podem ser feitos em C e Java…
são submetidos e avaliados por um robo que vai validar ou não seu algoritmo…
muito bom pra desenvolver lógica…
há parte dos enunciados das questões estão em portugues mas a maioria esta mesmo em espanhol…
bom divertimento a todos…

Marcio





3n+1 problema – C

4 09 2008

A idéia desse algoritmo é a seguinte:

ler um valor inteiro positivo, e calcular a seguinte seqüência: Se o número for par achar a metade dele; se é ímpar, multiplique por 3 e acrescentar 1. Repita este processo até que o valor seja 1,
imprima cada valor. Finalmente, imprima quantos passos foram necessários pra se sejar ao numero 1,
deve ser feita a verificação pra ver se o numero é maior que 1,
eis minha solução pra esse algoritmo :)
#include<stdio.h>
/*
Autor: MRSantos mrsantos4@ucs.com */

int main()
{
int i, v, passos = 0;

puts("Entre com um valor inteiro: ");
scanf("%d", &v);

if(v < 1)
{
puts("O valor deve ser maior que 1 :) ");
return -1;
}

while(v != 1)
{
passos += 1;
if( v % 2 == 0)
{
v /= 2;
printf("valor de X: %d\n", v);
}
else
{
v = v * 3 + 1;
printf("valor de X: %d\n", v);
}
}
printf("Passos necessarios: %d\n", passos);
return 0;
}

saida do programa:

mrsantos@Cerrito C>>$ ./passos
Entre com um valor inteiro:
9
valor de V: 28
valor de V: 14
valor de V: 7
valor de V: 22
valor de V: 11
valor de V: 34
valor de V: 17
valor de V: 52
valor de V: 26
valor de V: 13
valor de V: 40
valor de V: 20
valor de V: 10
valor de V: 5
valor de V: 16
valor de V: 8
valor de V: 4
valor de V: 2
valor de V: 1
Passos necessários: 19





Tutorial de C – Inglês

4 09 2008

Ontem na aula me prof passou pra turma esse link de um ótimo material pra quem quer aprender C, então aproveito e compartilho com quem precisar :)
Tutorial de C

abraços

Marcio





tabuada em C

4 09 2008

Um programinha simples pra gerar a tabuada em C, se não me falha a memoria foi o primeiro algoritmo que fiz
na vida, em pascal :)
segue o cara então…

#include<stdio.h>
/*
Autor: MRSantos mrsantos4@ucs.com */

#define MIN 1
#define MAX 10

int main()
{
int n, i;

system("clear");

puts("Entre com um numero entre 1 e 10");
scanf("%d", &n);
if( n < MIN || n > MAX )
{
puts("Numero informado deve ser entre 1 e 10...");
return -1;
}
else
{
for(i = 0; i <= 10; i++)
{
printf( "%d X %d = %d\n", i, n,  i * n );
}
}
return 0;
}

uma saída válida pra esse programa seria algo como:

Entre com um numero entre 1 e 10
9
0 X 9 = 0
1 X 9 = 9
2 X 9 = 18
3 X 9 = 27
4 X 9 = 36
5 X 9 = 45
6 X 9 = 54
7 X 9 = 63
8 X 9 = 72
9 X 9 = 81
10 X 9 = 90
abraços e até a próxima..
Marcio