Ir para conteúdo
Fórum Script Brasil

Edimartin Martins

Membros
  • Total de itens

    12
  • Registro em

  • Última visita

Sobre Edimartin Martins

Edimartin Martins's Achievements

0

Reputação

  1. Isso que tu está tentando é impossível. Não tem como o linux gerar um arquivo binário para windows. O wine talvez consiga. O MinGW é o compilador g++ para windows. A única diferença é que ele gera o executável e as dll's de windows mas o compilador possui e mesma qualidade do g++. Tu pode desenvolver em linux e depois apenas compilar no windows. Só que tu precisa cuidar as funções de cada sistema operacional. Recentemente eu fiz uns testes sobre trechos de código para cada sistema operacional no mesmo código. Aqui está o exemplo que eu fiz. Espero que ajude. #include <stdio.h> #ifdef _WIN32 || _WIN64 #include <conio.h> //Lembrei que não existe getch no linux #elif defined __linux__ || __APPLE__ //includes para a getch no linux #include <termios.h> #include <unistd.h> //Getch no linux int getch(void){ struct termios velho, novo; int x; tcgetattr( STDIN_FILENO, &velho ); novo= velho; novo.c_lflag &= ~( ICANON | ECHO ); tcsetattr( STDIN_FILENO, TCSANOW, &novo ); x= getchar(); tcsetattr( STDIN_FILENO, TCSANOW, &velho ); return x; } #else //#Plataforma não suportada #endif int main(){ printf("Program "); //windows 32 #ifdef _WIN32 printf(" windows 32"); #ifdef __GNUC__ printf(" minGW"); #endif #ifdef _MSC_VER printf(" VisualC"); #endif #endif //windows 64 #ifdef _WIN64 printf(" windows 64"); #ifdef __GNUC__ printf(" minGW"); #endif #ifdef _MSC_VER printf(" VisualC"); #endif #endif //Linux #ifdef __linux__ printf(" linux"); #ifdef __GNUC__ printf(" GCC"); #endif #endif //MacOS #ifdef __APPLE__ printf(" MacOS"); #ifdef __GNUC__ printf(" GCC"); #endif #endif getch(); #ifdef __APPLE__ printf("\n"); #endif return 0; }
  2. Eu vou tentar te dar uma luz: Tente usar orientação a objetos para o cubo, vai ficar mais fácil. Um objeto cubo possui 3x3x3 de peças aonde cada peça possui a sua posição e cor. Sobre o desenho. Se é um cubo, como é que tu quer representá-lo em 2d. O objeto cubo na geometria possui 3 eixos e portanto tu irá precisar desenha-lo em 3d. O desenho 3d no computador é openGL (a microsoft tenta empurrar o directX mas este só roda em windows e Xbox), mas a opengl só desenha. Tu precisa de um gerenciador de janelas que tenha suporte à opengl. Eles são muitos. O jeito é escolher algum entre glut, sdl, allegro, sfml, gtk, etc. Eu uso bastante a sfml porque além de gerenciamento de janelas, ela também possui desenho vetorial 2d e possui ótimos tutoriais. Mas a decisão é sua.
  3. Eu postei um tutorial em windows no meu blog. Espero que ajude. http://edimartin.blogspot.com/2011/08/ctrlc-ctrlv-em-c.html PS: o clippboard funcionou no mingw. Quando eu fui testar no visual C ele deu erro. Eu postei esse erro aqui no forum.
  4. Não são todas as dostribuições de linux que já vem com o g++ instalado. Eu uso o ubuntu e eu preciso escreve o comando "sudo apt-get install g++". Um conselho. Se tué bem noob e está usando o windows, inicia pelo devc++ já com o minGW nsalado que tu não terá problemas. Com o passar do tempo tu pode ir aprimorando o teu conhecimento sobre c++ ou outras linguagens. O único problema é que o devC não tem o auto-completar (ele procura o nome da função pra ti quando pressionado ctrl+espaço), uma ótima ide é o codeblocks que está evoluindo muito bem e também tem uma versão já com o mingw instalado. Mas se tu quizer usar outro compilador ele encontra pra ti. A única parte ruim é que é em inglês. O codeblocks possui versões para todos os sistemas operacionais (windows, macos e linux).
  5. Primeiro tu precisa habilitar o mouse para depois lê-lo. Tu precisa fazer a procura por c++ mouse in console (o console é o DOS que no linux é o UNIX). Talvez este link lhe ajude: http://www.cplusplus.com/forum/windows/21620/
  6. Leitura de arquivos existem2 condições. Ou o arquivo é binário ou é texto. Acredito que tu esteja usando arquivo texto e fazer a leitura dele pode ser feito caracter por caracter ou lendo uma string inteira. A questão é que por ser um arquivo texto tudo é string, não existe número. Uma string é um vetor de caracteres. Pode ter o tamanho que quiser e couber na tua memória. Um caracter é um número porque tudo que fica na memória do computador é número. Então uma string pode ser um vetor de números de 8 bits (vão de 0 á 256). Em outras palavras um caracter do tipo char é um byte. O fscanf lê até encontrar um espaço. Tem como pedir para ele ler até encontrar um '\n' (enter) ou '' fim de string mas eu não lembro como. Quando tu lê a string a72 o primeiro caracter é um número da tabela ASCII (procura no google por tabela ASCII), o segundo também e assim por diante. Não se esqueça quem em a72 nós podemos encontrar 4 caracteres. [0]=='a'; [1]=='a'; [2]=='a'; [3]==''; ou [3]==0u; Portanto tu pode vasculhar a string inteira testando se o caracter é uma letra ou um número. Se entre os caracteres ele encontrar pelo menos uma letra. Ele não é um número. Aqui está um exemplo: char* numero = NULL; fscanf(arq,"%s",numero); //testa se retornou alguma string if(numero){ //variavel para avisar se é número ou não bool isNumber=true; unsigned int i=0u; //enquanto o caracter for diferente de 0u ou '' ele vai testando while(numero[i]!=''){ // if(numero[i]<'0' || numero[i]>'9'){ //Se o caracter é menor que 0 (código 48) e maior que 9 (código 57) então ele não é um número. É um outro caracter //não é número isNumber=false; //vai fora do while break; } //senao continual testanto incrementando o i i++ } //no final do while. A variavel isNumber sera true ou false. se true ele é número e se false ele não é número if(isNumber){ //é um número printf("\né um número"); } else{ // printf("\nNão é um número"); } } Assim tu descobre se os caracteres são números ou letras. No caso de número com virgula. Tu só muda a condição adicionando o caracter da virgula. //Se o caracter for menor que 0 ou maior que 9 e diferente de ponto. Então é um caracter inválido. if((numero[i]<'0' || numero[i]>'9')&&numero[i]!='.'){ É claro que essa condição não testa multiplos pontos. Pra isso tu precisa criar uma variavel que avisa se já ocorreu um ponto ou não. Se já ocorreu então o segundo ponto é dado como erro: Exemplo. char* numero = NULL; fscanf(arq,"%s",numero); //testa se retornou alguma string if(numero){ //variavel para avisar se é número ou não bool isNumber=true; //variavel para avisar se o numero possui virgula (ponto) ou não bool point=false; unsigned int i=0u; //enquanto o caracter for diferente de 0u ou '' ele vai testando while(numero[i]!=''){ // if(numero[i]<'0' || numero[i]>'9'){ //Se o caracter é menor que 0 (código 48) e maior que 9 (código 57) então ele não é um número. É um outro caracter //testa se é um ponto if(numero[i]=='.'){ //testa se já ocorreu outro ponto antes if(point){ //se sim então ele não é um número //não é número isNumber=false; //vai fora do while break; } else{ //senão ele é um número com virgula e ele continua testando point=true; } } } //senao continual testanto incrementando o i i++ } //no final do while. A variavel isNumber sera true ou false. se true ele é número e se false ele não é número if(isNumber){ //é um número printf("\né um número"); } else{ // printf("\nNão é um número"); } } Um abraço.
  7. São duas funções diferentes. O while (tradução para enquanto) deixa um loop enquanto a condição seja verdadeira. Quando for falsa ele sai do loop. ex: unsigned int i=0u; while(i<=10u){ //Ele incrementa o i. Quando for maior que 10 (11,12,13,14,etc) o retorno é false então ele cai fora do while printf("\ni == %u" ,i ); i++; } Tem também o do while. O do while (faça enquanto) que é a mesma coisa do while mas a diferença é que ele executa as funções pelo menos uma vez. unsigned int i=0u; do{ // printf("\ni == %u" ,i ); i++; while(i<=10u); E o comando for é muito parecido com o while. A diferênça é que ele serve para contar. for(unsigned int i=0u;i<10;i++){ // printf("\ni == %u" ,i ); } Agora sobre tu descobrir quais são os números, tu precisa descobrir quais são usando o comando if (se) e guarda-los na memória. Tu pode usar um vetor estático ou dinâmico (depende do teu nível de aprendizado). O comando if recebe true ou false (só isso). Se receber true executa o if, se receber false executa o else se o mesmo existir. Os operadores ==, !=, ||, &&, <, <=, > ou >= servem para retornar true ou false dependendo dos valores adicionados. Um exemplo do comando if unsigned int i=0u; //se o i e igual a 0u if(i==0u){ //escreve que ele é igual printf("\nO i é 0u"); } else{ //senao escreve que ele é diferente printf("\nO i não é 0u"); } Um comando de loop pode ser quebrado usando a função break. EX: unsigned int i=0u; //eu inicio um while infinito sempre passando true para ele while(true){ //dentro eu quebro o while infinito quando o i for maior que 10u if(i>10u){ //quebra o loop break; } //incrementa o i i++; }
  8. Olá galera. Eu sou novo no forum. Eu estou criando uma biblioteca para ser rodada em diversos sistemas operacionais em diversos compiladores. Eu usei o codeblocks com o MinGW criando uma função de clipboard do windows. Aqui está o código simplificado. #include <stdio.h> #include <windows.h> int main(){ //Apenas abre o clipboard para retornar menos erro if(OpenClipboard(NULL)){ // } return 0; } Esse programa no MinGW não dá erro e eu consigo manipular o clipboard. O problema é que quando eu fui compilar no visual C++ usando o codeblocks. Ele retornou esses erros. main.obj||error LNK2001: unresolved external symbol __imp__OpenClipboard@4| bin\Debug\teste.exe||fatal error LNK1120: 1 unresolved externals| ||=== Build finished: 2 errors, 0 warnings ===| Eu não sei o que quer dizer o unresolved external symbol mas talvez seja alguma biblioteca. O entraçado é que o minGW (quen não é da microsoft) compila e roda numa boa. Mas o visual studio me barrou. Alguém sabe o que quer dizer esse erro?
  9. Em primeira coisa o inicio do teo programa não serve pra nada. Tu lê um número e faz um if fechado que não serve pra nada. Depois ele mostra na tela os arquivos e pastas do diretório que o programa está sendo executado e no final ele tenta rodar um aquivo na mesma pasta dele. Isso parece ser um cavalo de trória que lê um número e executa um programa por ti. Só não mande pra mim hehehehehe; Mas voltando ao assunto da duvida. A função system("") executa o terminal do sistema operacional. Em windows "DOS" em Linux e Mac "UNIX". Em difetentes sistemas operacionais usam-se diferentes comandos. a função "system("AnotherMatrixScreenSaver.scr");" tenta abrir o arquivo dentro da pasta em que o programa está senso usado. Se o arquivo não existir nada será feito. Como resolver o teu problema. Cola o arquivo na mesma pasta do programa. Assim o programa conseguirá acessá-lo.
  10. O GTK é o sistema de janelas. Ele não faz desenhos livres. Para desenho junto com o GTK tu vai precisar usar uma outra biblioteca que o GTK tenha suporte. Tu pode usar openGL, Cairo ou alguma outra biblioteca que o GTK tenha suporte. tutorial de GTK em c# mas as funções em C são as mesmas. Só muda os includes http://zetcode.com/tutorials/gtksharptutorial/
  11. O teu código tem 2 problemas. O primeiro é o problema de compilação que se resolve simplesmente convertendo o valor da retorno da tua função (eu tentei aqui e consegui compilar). char** buildEnvironment(){ char environment[10][10] = { {'1','1','1','1','1','1','1','1','1','1'}, {'1','0','0','0','0','0','0','0','0','1'}, {'1','0','0','0','0','0','0','0','0','1'}, {'1','0','0','0','0','0','0','0','0','1'}, {'1','0','0','0','0','0','0','0','0','1'}, {'1','0','0','0','0','0','0','0','0','1'}, {'1','0','0','0','0','0','0','0','0','1'}, {'1','0','0','0','0','0','0','0','0','1'}, {'1','0','0','0','0','0','0','0','0','1'}, {'1','0','0','0','0','0','0','0','0','1'} }; //return environment; return (char**)environment; } Mas isso gera um problema de alocação de memória. Quando tu declara um char variavel[10] (vou usar uma única dimensão para ser mais fácil de explicar), tu está alocando 11 coisas. O primeiro é todas as 10 posições estáticas na memória. O segundo é o ponteiro estático que aponta para essas posições. O ponteiro possui um valor de posição na memória. O problema é que é tudo ESTÁTICO, ou seja: Quando a tua função morrer (ser desalocada da memória) a tua memória vai junto. Por isso ele dava erro de retorno que não se pode retornar um ponteiro estático como dinâmico. A não ser que tu force a conversão de valor. Fonçando a conversão de valor eu retornei a posição do primeiro valor na minha matriz (valor [0] [0]) que não existe mais porque era estático e foi desalocado da memória. Quando eu tentei usa-lo tentando escrever na tela. char **arrayCenary=buildEnvironment(); for(unsigned int i=0u;i<10u;i++){ for(unsigned int j=0u;j<10u;j++){ // printf("\n%u %u %c" ,i ,j ,arrayCenary[i][j] ); } } A compilação deu certo mas ao executar o programa veio a morte do mesmo. O sistema operacional retornou a mensagem de: Esse programa executou uma operação ilegal e será fechado. A operação ilegal foi de buscar um valor na memória que não fosse correspondente a mim. Então ele me barrou. A tua função de criação do cenário precisa aloca-lo dinâmicamente (usando new ou malloc), atribuir os valores e retornar o mesmo. Por ser dinâmico ele não morre junto com a função. No final do teu programa tu precisa dar o delete arrayCenary. Eu vou lhe ajudar com a alocação de desalocação. Vou usar new e delete porque é mais fácil. Primeiro a tua função aloca: char** buildEnvironment(){ //primeiro aloca as colunas. char** environment=new char*[10u]; //depois aloca-se as linhas for(unsigned int i=0u;i<10u;i++){ // environment[i] = new char[10]; } //aqui de alguma maneira tu precisa setar os valores. Eu não conheço uma mameira mais fácil de seta-los sem ser environment[0][0] = '1' //linha por linha. E por serem muitos valores eu não vou fazer nada //depois retorna a matrix alocada dinamicamente return environment; } E depois da usa-la tu desaloca char **arrayCenary=buildEnvironment(); //Para desalocar os valores da memoria é só fazer o inverso. if(arrayCenary){ for(unsigned int i=0;i<10u;i++){ // if(arrayCenary[i]) delete arrayCenary[i]; arrayCenary[i]=NULL; } //no final ele deleta as colunas delete arrayCenary; } arrayCenary=NULL; Espero te-lo ajudado. Um abraço.
  12. Olá. Tu também precisa avisar qual compilador está usando no codeblocks mas vamos supor que tu esteja usando o MinGW (G++ do windows). Bibliotecas de programação em C++ (e em outra linguagens) existem dois tipos. Estática e dinâmica. A biblioteca estática é aquela que quando tu usa, o compilador copia ela toda e cola no teu executável. A biblioteca dinâmica é aquela que quando tu usa, o compilador não copia ela para o executável. Ele usa um arquivo externo com a extenção de .dll no windows. Quando se usa uma biblioteca estática, é necessário carregar apnas o executável. A biblioteca dinâmica é necessário levar junto a dll. Qual é melhor? Depende da situação. Se tu tiver muitos programas que usam por exemplo a opengl. É melhor ter a openGL dinâmica porque todos os programas usarão aquela dll. Assim os programas ficam menores. Isso foi criado na época que as memórias eram muito pequenas. No codeblocks clica em file/new/project e tu será redirecionado para o menu de cliação de projeto. Criando um projeto de Dynamic Link Library tu gera um projeto que cria dois arquivos. libprojeto.a e projeto.dll. O primeiro é usado para linkar a biblioteca no teu programa. O segundo é usado para o teu programa carrega-la na inicialização. Criando um projeto de static library tu gera um proejto de biblioteca estática que cria apenas um arquivo. libprojeto.a. Assim tu precisa apenas linkar o libprojeto.a no teo programa que o compilador irá copiar o arquivo e colar no teu executável. Usando as biliotecas. O codeblocks possui as propriedades do projeto aonde é só ir no nome do projeto no canto esquerdo da tela clica com o botão direito e clica em propreties... (é o último botão). Nas propriedades clica em projetct build options. Dentro clica na aba de Linker Sesttings. Em linker Sesttings existem duas altesnaticas da esquerda para a direita. A primeira quando tu adiciona é só escrever a sua biblioteca "projeto". A segunda é como seria escrito para o compilador ler. Tu separa as bibliotecas por 'enter' e adiciona elas escreverndo -l antes dos nomes. EX: -lprojeto (não vai lib). O compilador vai procurar o teu arquivo libprojeto.a na pasta lib do compilador (certifíquise de colar o arquivo.a na pasta lib, o arquivo .h na pasta include). Fazendo esses passos tu consegue criar uma biblioteca no MinGW usado o codeblocks. Um abraço.
×
×
  • Criar Novo...