Autor Tópico: Amostra de Programas - espaço dos programadores do CC  (Lida 28100 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #100 Online: 30 de Junho de 2007, 21:23:06 »
tem trocentos. Acho que fiz um trabalho em opengl uma vez com turbo C e depois mudei pra linux com facilidade. Achei bom, mas isso tem uns 10 anos…

Para fazer gráficos cartesianos baseados em funções, no prompt do DOS, qual uso?

Offline Guinevere

  • Nível Máximo
  • *
  • Mensagens: 5.861
  • Sexo: Feminino
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #101 Online: 30 de Junho de 2007, 21:33:27 »
eu acho que era graphics.h

tem muito tempo...

Offline Andre

  • Nível 39
  • *
  • Mensagens: 4.072
  • Sexo: Masculino
    • Aletéia
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #102 Online: 15 de Julho de 2007, 13:08:28 »
Vocês também sentem a estranha necessidade de programar nem que seja um simples hello world quando estão sem nada para fazer?
Se Jesus era judeu, então por que ele tinha um nome porto-riquenho?

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #103 Online: 15 de Julho de 2007, 13:09:48 »
Vocês também sentem a estranha necessidade de programar nem que seja um simples hello world quando estão sem nada para fazer?

Afirmativo!

Offline uiliníli

  • Nível Máximo
  • *
  • Mensagens: 18.107
  • Sexo: Masculino
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #104 Online: 15 de Julho de 2007, 13:12:32 »
Vixi, faz tempo que não programo... Preciso dar uma refrescada na memória.

Offline Andre

  • Nível 39
  • *
  • Mensagens: 4.072
  • Sexo: Masculino
    • Aletéia
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #105 Online: 15 de Julho de 2007, 13:13:43 »
Pior que eu estou sem idéia do que programar... Acho que vai ser um hello world mesmo :lol:
Se Jesus era judeu, então por que ele tinha um nome porto-riquenho?

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #106 Online: 15 de Julho de 2007, 13:13:52 »
Vixi, faz tempo que não programo... Preciso dar uma refrescada na memória.

Eu ando sem muita inspiração ultimamente. Não sobre como resolver os problemas, mas que problemas resolver.

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #107 Online: 15 de Julho de 2007, 13:15:56 »
Pior que eu estou sem idéia do que programar... Acho que vai ser um hello world mesmo :lol:

Aquele site do projeto Euler deu várias coisas interessantes para resolver. Já resolvi 9 problemas dele.

Offline Andre

  • Nível 39
  • *
  • Mensagens: 4.072
  • Sexo: Masculino
    • Aletéia
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #108 Online: 27 de Novembro de 2007, 17:02:19 »
Alguém pode me dar uma mãozinha no programa que estou fazendo? É mais para aprendizado, mas seria legal se ele funcionasse 100%.

Você roda ele chamando 'crypt arquivo_de_entrada arquivo_de_saida senha' e ele criptografa usando XOR (exclusivamente ou), mas estou tendo alguns problemas. Se eu tiver o arquivo 'in' com o conteudo 'Hello world' e criptografá-lo usando a senha 'asd', ele funciona perfeitamente. Agora, se eu criptografar esse mesmo arquivo usando como senha 'hello', eu tenho problemas. Quando ele for criptografar, ele irá fazer 'e' ^ 'e', resultando num caractere nulo (imagino que seja esse o problema).

Código: [Selecionar]
/* crypt:
 * crypt input output key
 *
 * Autor: André Ramaciotti da Silva
 *
 * Esse programa abre o arquivo determinado pelo primeiro argumento (input) e
 * criptografa-o usando um algoritmo que usa o operador lógico ^ (XOR) e a
 * chave (key) que foi dada como terceiro argumento.
 *
 * O resultado é gravado no arquivo dado pelo segundo argumento (output). No
 * atual estado, deve-se tomar cuidado, pois se já houver um arquivos com o
 * nome do segundo argumento, este será sobrescrito.
 *
 * A versão atual não funciona direito quando um dos caracteres da string
 * coincidir com alguma caractere da chave, gerando um caractere nulo. */

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

/* TODO: incluir algumas funções numa biblioteca estática separada. */

/* Criptografa o *text* do primeiro argumento usando a *key* do segundo e
 * retorna uma string com o resultado */
char *encrypt( const char *text, const char *key );

/* Retorna uma string com todo o conteudo do arquivo *fileptr* */
char *get_from_file( FILE *fileptr );

/* Abre o arquivo *filename* com as opções *options*. Se bem sucedido, retorna
 * um ponteiro para o arquivo, se não, aborta a execução do programa. */
FILE *xfopen( const char *filename, const char *options );

/* Retorna o tamanho do arquivo *fileptr* em número de caracteres */
int filesize( FILE *fileptr );

/* Salva *num* caracteres da string *str* no arquivo *fileptr*. Útil se houver
 * algum caractere nulo em meio à string */
void to_file( const char *str, FILE *fileptr, int num );

/* Aloca memória usando calloc e verifica se foi bem sucedido. Se for, retorna
 * o(s) ponteiros, se não for, aborta a execução do programa */
void *xcalloc( size_t number, size_t size );

/* AQUI COMEÇA O PROGRAMA */
int main( int argc, char* argv[] )
{
FILE *input = NULL;
FILE *output = NULL;
int size;
char *string = NULL;
        char *key = NULL;
char *encrypted = NULL;

if( argc != 4 )
{
printf("Usage:\ncrypt inputfile outputfile key\n");
exit(1);
}

input = xfopen( argv[1], "r" ); /* "rb" também não funciona */
output = xfopen( argv[2], "w" );

size = filesize( input );

string = (char *) xcalloc( size, sizeof( char ) );
key = (char *) xcalloc( strlen( argv[3] ), sizeof( char ) );
encrypted = (char *) xcalloc( size, sizeof( char ) );

strcpy(key, argv[3] );

string = get_from_file( input );

encrypted = encrypt( string, key );
to_file( encrypted, output, size );

fclose( input );
fclose( output );

return 0;
}

void *xcalloc( size_t number, size_t size )
{
void *ptr = NULL;

ptr = calloc( number, size );

if( ptr == NULL )
abort();

return ptr;
}

FILE *xfopen( const char *filename, const char *options )
{
FILE *file = fopen( filename, options );
if( file == NULL )
abort();

return file;
}

char *encrypt( const char *text, const char *key )
{
char *str = NULL;
int scount, kcount;

str = (char *) xcalloc( strlen( text ), sizeof( char ) );

for( scount = 0, kcount = 0; scount < strlen( text );
scount++, kcount++)
{


str[scount] = (text[scount] ^ key[kcount]);

if( kcount == (strlen( key ) -1) )
{
kcount = -1;
}

}

str[ strlen( text ) ] = '\0';
return str;
}

int filesize( FILE *fileptr )
{
char c;
int count = 0;

while( c != EOF )
{
c = fgetc( fileptr );
count++;
}

rewind( fileptr );
return count;
}

char *get_from_file( FILE *fileptr )
{
int size, i;
char *str;

size = filesize( fileptr );
str = (char *) xcalloc( size, sizeof( char ) );

for( i = 0; i < size; i++ )
{
str[i] = fgetc( fileptr );
}

str[size-1] = '\0';

return str;
}

void to_file( const char *str, FILE *fileptr, int num )
{
int i;

for( i = 0; i < (num-1); i++ )
{
fputc( str[i], fileptr );
}
}
Se Jesus era judeu, então por que ele tinha um nome porto-riquenho?

Offline Oceanos

  • Nível Máximo
  • *
  • Mensagens: 8.924
  • Sexo: Masculino
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #109 Online: 27 de Novembro de 2007, 17:17:33 »
[...]Quando ele for criptografar, ele irá fazer 'e' ^ 'e', resultando num caractere nulo (imagino que seja esse o problema).[...]
Isso não seria um problema... Porque 0 (ele retorna 0) ^ 'e' = 'e', na hora de descriptografar.

Eu estou sem tempo de olhar o código agora, mas, duvido que esse seja o problema.

Uma dica: não coloque a senha como parâmetro, peça para o usuário digitar. Usando ela como parâmetro, o cara pode voltar o histórico do bash e ver ela...
« Última modificação: 27 de Novembro de 2007, 17:20:06 por Oceanos »

Offline Andre

  • Nível 39
  • *
  • Mensagens: 4.072
  • Sexo: Masculino
    • Aletéia
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #110 Online: 27 de Novembro de 2007, 19:06:53 »
Sim, ainda quero mudar algumas coisas na interface dele, mas primeiro quero resolver esse problema.
Se Jesus era judeu, então por que ele tinha um nome porto-riquenho?

Offline Andre

  • Nível 39
  • *
  • Mensagens: 4.072
  • Sexo: Masculino
    • Aletéia
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #111 Online: 30 de Novembro de 2007, 09:50:10 »
Está funcionando agora. O problema era eu estar usando strlen() na função encrypt().

As mudanças:
Código: [Selecionar]
25: char *encrypt( const char *text, const char *key, int size );
74: encrypted = encrypt( string, key, size );
104: char *encrypt( const char *text, const char *key, int size );
109: str = (char *) xcalloc( size, sizeof( char ) );
111: for( scount = 0, kcount = 0; scount < size;
125: str[ size ] = '\0';
Se Jesus era judeu, então por que ele tinha um nome porto-riquenho?

Offline Mussain!

  • Contas Excluídas
  • Nível Máximo
  • *
  • Mensagens: 8.228
  • Sexo: Masculino
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #112 Online: 30 de Novembro de 2007, 11:36:55 »
Eu já não tenho mais neurônios mesmo.... pode continuar falando aí....  |(



Eu ainda vou entender desses troços....   |(

Offline SnowRaptor

  • Webmaster
  • Nível Máximo
  • *
  • Mensagens: 17.961
  • Sexo: Masculino
Garotos (e garotas, por que não?) de programa do CC!
« Resposta #113 Online: 02 de Outubro de 2008, 00:22:08 »
Vamos postar pedaços de código com os quais temos algum carinho, que tal?


Esse aqui imprime todas as cadeias possíveis (sem auto-intersecção) formadas por 6 pontos numa rede quadrada. Fiz segunda à noite e me fez lembrar das aulas de princípios de algoritmos lá do segundo ano da graduação.
Código: [Selecionar]
#include<stdio.h>
#include<stdlib.h>

#define TAMANHO 6
typedef struct cel {
   int         x,y; /* conteúdo */
   int profundidade;
   struct cel *anterior;
   struct cel *dir, *esq, *cima,*baixo;
} monomero;

void popula(monomero *polimero);
monomero *criamonomero(int x, int y, monomero *anterior);
int checa(int x, int y, monomero *teste);
void imprime(monomero *polimero);
void exibe(monomero *polimero);

int main(){

monomero *polimero;
polimero=criamonomero(0,0,NULL);
polimero->dir=criamonomero(1,0,polimero);

popula(polimero->dir);

imprime(polimero);

return 0;
}

monomero *criamonomero(int x, int y, monomero *anterior){
monomero *novo;
novo = malloc(sizeof(monomero));
novo->x=x;
novo->y=y;

if( x==0 && y==0 )
novo->profundidade=1;
else
novo->profundidade=anterior->profundidade +1;
novo->anterior=anterior;
novo->dir=NULL;
novo->esq=NULL;
novo->cima=NULL;
novo->baixo=NULL;
return novo;
}

void popula(monomero *polimero){
int ini=0,fim=0;
int x,y;
monomero *fila[TAMANHO*TAMANHO*TAMANHO*TAMANHO],*work;
fila[fim++]=polimero;
for(work=fila[ini++];work->profundidade < TAMANHO;work=fila[ini++]){
x=work->x;
y=work->y;
if(checa(x+1,y,work)){
work->dir=criamonomero(x+1,y,work);
fila[fim++]=work->dir;
}
if(checa(x-1,y,work)){
work->esq=criamonomero(x-1,y,work);
fila[fim++]=work->esq;
}
if(checa(x,y+1,work)){
work->cima=criamonomero(x,y+1,work);
fila[fim++]=work->cima;
}
if(checa(x,y-1,work)){
work->baixo=criamonomero(x,y-1,work);
fila[fim++]=work->baixo;
}
}
}

int checa(int x, int y, monomero *teste){
monomero *work;
if (teste == NULL) return 0;
for (work=teste; work != NULL; work=work->anterior)
if(work->x == x && work->y == y) return 0;
return 1;
}

void imprime(monomero *polimero){
if (polimero==NULL) return;

if (polimero->profundidade == TAMANHO)
exibe(polimero);
else {
imprime(polimero->dir);
imprime(polimero->esq);
imprime(polimero->cima);
imprime(polimero->baixo);
}
}

void exibe(monomero *polimero){
monomero *work=polimero;
while(work !=NULL){
printf("%d %d\n", work->x, work->y);
work = work->anterior;
}
printf("\n\n");
}
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Unknown

  • Conselheiros
  • Nível Máximo
  • *
  • Mensagens: 11.324
  • Sexo: Masculino
  • Sem humor para piada ruim, repetida ou previsível

"That's what you like to do
To treat a man like a pig
And when I'm dead and gone
It's an award I've won"
(Russian Roulette - Accept)

Offline SnowRaptor

  • Webmaster
  • Nível Máximo
  • *
  • Mensagens: 17.961
  • Sexo: Masculino
Re: Garotos (e garotas, por que não?) de programa do CC!
« Resposta #115 Online: 02 de Outubro de 2008, 02:00:18 »
Te odeio, Jonas ¬¬
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Unknown

  • Conselheiros
  • Nível Máximo
  • *
  • Mensagens: 11.324
  • Sexo: Masculino
  • Sem humor para piada ruim, repetida ou previsível
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #116 Online: 02 de Outubro de 2008, 02:06:10 »
:hihi:

"That's what you like to do
To treat a man like a pig
And when I'm dead and gone
It's an award I've won"
(Russian Roulette - Accept)

Offline Andre

  • Nível 39
  • *
  • Mensagens: 4.072
  • Sexo: Masculino
    • Aletéia
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #117 Online: 06 de Outubro de 2008, 16:54:46 »
Aos linuxers: estava dando uma olhada no fórum do Archlinux e achei esse script (é necessário ter o pacote xsel instalado):

Código: [Selecionar]
#!/bin/sh
firefox "http://www.google.com/search?q=`xsel -p -o`&ie=UTF-8&oe=UTF-8"

Depois dê permissão de execução e configure uma keybinding para ele no seu window manager. Eu escolhi Win+G

Para usar: selecione um texto e aperte Win+G. Ele abrirá uma aba no firefox com uma página do google pesquisando o texto selecionado.
Se Jesus era judeu, então por que ele tinha um nome porto-riquenho?

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #118 Online: 07 de Outubro de 2008, 13:29:58 »
Ainda estou me acostumando com os ponteiros, mas não é nem difícil, é só questão de prática mesmo.

Eu até hoje não aprendi a usar ponteiros. Aquele código que eu fiz para procurar números primos em um intervalo de N ficaria muito mais rápido e elegante se eu armazenasse os primos na memória e só dividisse um número por estes.

Offline SnowRaptor

  • Webmaster
  • Nível Máximo
  • *
  • Mensagens: 17.961
  • Sexo: Masculino
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #119 Online: 07 de Outubro de 2008, 13:32:12 »
EU fiz um programa desses, de primos usando lita ligada. O problema é que precisa de tanta memória quanto 16 vezes os números primos armazenados, isso dá um máximo de 32GB num processador de 32bits, se você quiser levar ao extremo.

Ó:
Código: [Selecionar]
#include<stdio.h>
#include<stdlib.h>
#include<math.h>



typedef struct divs {
unsigned long int n;
struct divs *prox;
} primo;

int main(){
unsigned long int x, max, numprim=1, naoprimo;
double raiz,frac;
primo *primos=malloc(sizeof(primo));
primo *flag;

primos->n=2;
primos->prox=NULL;

max=pow(2,23)-1;
/*max=10000;*/

for (x=2; x < max; x++){

naoprimo=0;
raiz=sqrt(x);
for(flag=primos;(flag->n <= raiz) && flag!= NULL; flag=flag->prox){
if(x%flag->n == 0){
naoprimo = 1;
break;
}
}
if (!naoprimo){

while(flag->prox != NULL)
flag=flag->prox;
flag->prox=malloc(sizeof(primo));
flag->prox->n=x;
flag->prox->prox=NULL;
/*frac=(double) x/max;
printf("Primo %lu Max= %lu Frac=%g\n", x, max,frac);*/
numprim++;
}
}

printf("Lista final de primos, contendo %lu valores:\n", numprim);
for(flag=primos; flag!=NULL; flag=flag->prox)
printf("%lu\t", flag->n);
printf("\nmax= %lu\n", max);
return 0;
}
« Última modificação: 07 de Outubro de 2008, 13:34:40 por SnowRaptor »
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #120 Online: 07 de Outubro de 2008, 13:36:52 »
EU fiz um programa desses, de primos usando lita ligada. O problema é que precisa de tanta memória quanto 16 vezes os números primos armazenados, isso dá um máximo de 32GB num processador de 32bits, se você quiser levar ao extremo.

Ah! Então nem compensa armazenar os primos na memória. Mesmo porque, para varrer todos os primos de 2 a 987000000 (o maior número que consigo obter com um unsigned long int) meu programinha leva só 3 minutos.

Offline SnowRaptor

  • Webmaster
  • Nível Máximo
  • *
  • Mensagens: 17.961
  • Sexo: Masculino
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #121 Online: 07 de Outubro de 2008, 13:39:25 »
Você pode sempre fazer um vetorzão e ir guardando lá.
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

Offline Eleitor de Mário Oliveira

  • Nível 37
  • *
  • Mensagens: 3.502
  • Sexo: Masculino
    • Lattes
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #122 Online: 07 de Outubro de 2008, 13:41:28 »
Você pode sempre fazer um vetorzão e ir guardando lá.

Pensei nisto. Mas kct! O vetor teria que ter algumas dezenas de milhares de células.

Offline Fenrir

  • Nível 29
  • *
  • Mensagens: 1.569
  • Sexo: Masculino
  • Cave Canem
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #123 Online: 07 de Outubro de 2008, 13:45:09 »
Eu ja tive um programinha com estas linhas:

if (true) return;

 :mrgreen:
"Heaven and Earth are not benevolent; They treat the myriad of creatures as straw dogs"
― Laozi

"No testimony is sufficient to establish a miracle, unless the testimony be of such a kind, that its falsehood would be more miraculous, than the fact, which it endeavors to establish"
― David Hume

“Never argue with an idiot. They will drag you down to their level and beat you with experience.”
― Mark Twain

Offline SnowRaptor

  • Webmaster
  • Nível Máximo
  • *
  • Mensagens: 17.961
  • Sexo: Masculino
Re: Amostra de Programas - espaço dos programadores do CC
« Resposta #124 Online: 07 de Outubro de 2008, 13:57:50 »
Você pode sempre fazer um vetorzão e ir guardando lá.

Pensei nisto. Mas kct! O vetor teria que ter algumas dezenas de milhares de células.

Dezenas de milhares de células unsigned long int é menos de 2MB!!!!
Elton Carvalho

Antes de me apresentar sua teoria científica revolucionária, clique AQUI

“Na fase inicial do processo [...] o cientista trabalha através da
imaginação, assim como o artista. Somente depois, quando testes
críticos e experimentação entram em jogo, é que a ciência diverge da
arte.”

-- François Jacob, 1997

 

Do NOT follow this link or you will be banned from the site!