Ir ao conteúdo
  • Cadastre-se

Ansi C

Membro Pleno
  • Posts

    3.206
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de Ansi C em Problemas com a funcao free() foi marcado como solução   
    Olha funciona muito bem! Parabéns pela documentação também não perda o tesão nisso de jeito maneira.
     
    /* Principal função de um programa escrito em c */ int main(void) { int *vetor, linhas, y, colunas, x; linhas = 3; /* numero de linhas da matriz */ y= 0; colunas= 3; /* numero de colunas da matriz */ x= 0; vetor= (int *) malloc(linhas * colunas * sizeof(int)); // aqui está pronta a matriz (void) vetor[(colunas * y) + (x)]; /* e assim que se acessa os valores da matriz, na realidade e um vetor, mas acessamos como se fosse uma matriz ^Linha ^Coluna */ for (y= 0; y < linhas; ++y){ for (x= 0; x < colunas; ++x){ vetor[(colunas * y) + (x)]= x; printf("%d ", vetor[(colunas * y) + (x)]); } printf("\b.\n"); } printf("teste "); /* essa linha eh imprimida */ free(vetor); printf(" teste222 "); /* essa linha não eh imprimida */ return 0; }  
  2. O post de Ansi C em Redimensionar o prompt sem usar funcao SYSTEM foi marcado como solução   
    @s4lezardv1A Olá!
    Se o que você quer é outra forma para redimensionar a Janela do console no Windows, aqui vai:
    BOOL console_windows_redimensione(int y, int x) { HANDLE console= GetStdHandle(STD_OUTPUT_HANDLE); SMALL_RECT windows= { 0, 0, (y - 1), (x - 1) }; COORD screen= { y, x }; BOOL acesso= SetConsoleScreenBufferSize(console, screen); BOOL retorn= SetConsoleWindowInfo(console, acesso, &windows); return retorn; } *Importe a biblioteca windows.h
     
    UPDATE: Não garante que será compatível com as API's que está usando para controle do mouse.
  3. O post de Ansi C em Desafio das placas em C foi marcado como solução   
    @sandrow marcelow Certo.
    Penso em substituir as letras por seu número, sua posição no alfabeto. Assim sendo, no nosso alfabeto a vogal A é a primeira letra, seu índice é 0, logo que maior número possível para esse mesmo índice e 25, a letra Z, então cada letra é representada por um dezena 00, por isso no sistema
    B= 01,
    B= 01,
    ...
    Z= 25, se dispor as três letras uma a pois a outra (ABZ) o resultado é esse (01-01-25 ou 10125). Logo 10125= BBZ !!!
    O primeiro digito A3A2A1 : Cada A é Múltiplo de 100.
    Codigo= 0.
    Codigo=  Codigo * 100 + B; Codigo → 1
    Codigo=  Codigo * 100 + B; Codigo → 101
    Codigo=  Codigo * 100 + Z; Codigo → 10125
     
    Em inteiros BBZ é a mesma coisa que 10125, então se o usuários digitar BBZ, o program vai ver 10125.
    Muito simples, principalmente porque já fazemos isso com os dígitos (de 1 ... 9) no sistema decimal e em outras bases, contudo vamos aguarda por outras ideias.
  4. O post de Ansi C em Como faço para calcular a idade da pessoa foi marcado como solução   
    @Josuke É tudo deve ser em uma expressão única e em um só loop.
    ((cont % 400 == 0) || (cont % 4 == 0 && cont % 100 != 0)) entendeu.
     
     
    Nos diga também quais são os valores de entrada que está usando, e quais são os valores de saída corretos.
     
    Estou sentindo um pontinha de dificuldade em te ajudar porque cada vez você aprece com um coisa nova. Até então era somente um modulus agora é 3 e usados de maneira que nunca vi antes. Você por acaso está sendo orientado por outro post é isso?
  5. O post de Ansi C em Fazer uma lista apontar para outra foi marcado como solução   
    @Igor Vargas  Esta correto! A logística é esta mesma: A lista de contatos se exclui, se excluir um letra. Todos os contatos que estiverem associados a uma letra A, por exemplo, também devem ser liberados caso ainda tenha contatos lá.
     
    Veja aqui as função revisadas!
    @AnsiC/AgendaDeContatos
     
     
  6. O post de Ansi C em fscanf n esta funcionando foi marcado como solução   
    @Gabriel Paulucci Você precisa definir, absolutamente como pretende gravar esses dados, porque a escolha de gravação surtira efeito tanto no layout dentro do arquivo como também na strings de formatação nas funções de leitura. Então, observei que a maior dificuldade de leitura é o campo nome porque os espaços não são capturados quando usado "%s". O mesmo problema não existe no uso do formatador "%c" (para caracteres), por exemplo, "%20c" vai captura, se no scanf, os 20 primeiros caracteres, consequentemente, apenas a parte interessante da string no teste (nome). Para função printf usa-se "%-.20s", ou seja, limita-se a saída de 20 caracteres,  o mesmo número na formatação de fscanf.
     
    Sim! Tem esse pontinho antes do sinal de subtração, pois não se trada do tamanho do campo, como é o caso de fprintf, mas sim, da quantidade de caracteres na saída daquele campo.
     
    Resumo
    para fscanf: "%5i %20c %9i" para fprintf: "%05i %-20s %09i" para printf:  "%05i %-.20s %09i  
    Imagem Ilustrativa (sujeita a remoção)

     
     
    ― Tem mais algo?
  7. O post de Ansi C em geração de matriz a partir de uma equação foi marcado como solução   
    @Vini Marques Raimundo Olá!
    ― Tem duas coisas aqui: Matemática e C!
    Aperte de C você já disse não ter entendido, mas enquanto a geometria do problema?
     
     
  8. O post de Ansi C em "Colar" Variável a comando(ou biblioteca,função) foi marcado como solução   
    @Gabriel G.S. 1023 Olá!
    ― Entendo (pelo menos em parte ).
    Acho que é isso que você está procurando:
    /** Tipo para objeto função */ typedef void (*aritm)(int, int); /** Aritmética Adição, Subtração e Multiplicacao */ void aritm_adicao(int a, int b){aritm_result(a + b);} void aritm_subtracao(int a, int b){aritm_result(a - b);} void aritm_multiplicacao(int a, int b){aritm_result(a * b);} void aritm_result(int r){cout << r << endl << endl;} int main(void) { aritm operacao[]= { [0]= aritm_adicao, [1]= aritm_subtracao, [2]= aritm_multiplicacao, }; int memb_a, memb_b, result; cout << "Atencao... Agora entre com um valor inteiro :> "; cin >> memb_a; cout << "So mais uma vez, entre com um valor inteiro :> "; cin >> memb_b; jmp_operar : cout << "Digite -- ( 0 )->Soma, ( 1 )->Diferenca e ( 2 )->Produto. \n"; cout << "( )\b\b\b"; cin >> result; cout << "Resultado : "; operacao[result](memb_a, memb_b); goto jmp_operar; return 0; } Especuladamente, suspeito da eficiência deste método.
     
  9. O post de Ansi C em JUDE problemas para explicação foi marcado como solução   
    Atá! agora entendi!
    Sim de fato, a mensagem da postagem está completamente fora de contexto se comparar ao arquivo statement.pdf que não tem nada com relação aos dados dentro da pasta ...\D&D\tests\main.
     
    Esquenta não!
  10. O post de Ansi C em O zero deve apenas exibir os resultados e NÃO deve ser lido como a MENOR IDADE foi marcado como solução   
    @Dunes Nós  temos aqui uma política local de não fornecer respostas para exercício. Somente cuidamos das perguntas objetivas. Daí com relação aos certos erros cometidos:
     
    Qual é a assinatura na linguagem C para função principal main que o GCC orienta? Por que main(){ ... } assinada dessa forma sem valor de retorno específico funciona? Quando explicitamente pela norma C é recomendo, e culturalmente vinculado, int main(void){...}, int main(int argc, char *argv[]){...}. Principalmente quando o ambiente é restrito (sistema operacionais)? Qual a importância de iniciar as variáveis antes de usá-las?  Qual a diferença em pre-incremento e pós-incremento? Qual situação lógica no uso de um ou do outro? Documentar código é importante? Ou é perda de tempo? ― Agora observe o resultado seu código no meu computador, os resultados foram além de um certo 0. Parte das perguntas acima estão relacionadas ao que vem abaixo:
     
     
     

  11. O post de Ansi C em Estou tentando usar a Função WriteConsoleOutput mas não consigo foi marcado como solução   
    Olá@Gabriel Paulucci
    Agora com todas as 7 correções.
     
    Imagem Ilustrativa
     
    Relógio
    #include <windows.h> #include <process.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <stdio.h> static int i= 0; static HANDLE hConsole= ((HANDLE)0); void timeagr(void *param); int main(int argc, char const *argv[]) { hConsole= GetStdHandle(STD_OUTPUT_HANDLE); char teste= ((char)0); _beginthread(timeagr, 0, ((void*)0)); printf("%s", "\n\n\n\n\n"); scanf(" %c", &teste); system("PAUSE"); return EXIT_SUCCESS; } void timeagr(void *param) { time_t rawtime= ((time_t)0); struct tm *timeinfo= ((struct tm *)0); CHAR_INFO charbufferdata[sizeof((char[]){"DD/MM/YYYY"})]= {0}; SMALL_RECT writeareadata = {0, 0, 12, 1}; COORD bufsizedata= {11, 1}; COORD bufcoorddata= {0, 0}; unsigned DD, MM, YYYY; char tempo_DD[4]= {0}; char tempo_MM[4]= {0}; char tempo_YYYY[5]= {0}; char tempo_DDMMYYYY[11]= {0}; CHAR_INFO charbufferhora[sizeof((char[]){"hh:mm:ss"})]= {0}; SMALL_RECT writeareahora = {11, 0, 23, 1}; COORD bufsizehora= { 9, 1}; COORD bufcoordhora= {0, 0}; unsigned hh, mm, ss; char tempo_hh[4]= {0}; char tempo_mm[4]= {0}; char tempo_ss[4]= {0}; char tempo_hhmmss[9]= {0}; for(;/* ciclo infinto */;){ time(&rawtime); timeinfo= localtime(&rawtime); DD= timeinfo->tm_mday; MM= timeinfo->tm_mon + 1; YYYY= timeinfo->tm_year + 1900; sprintf(tempo_DD, "%02u", DD); sprintf(tempo_MM, "%02u", MM); sprintf(tempo_YYYY, "%u", YYYY); strcat(tempo_DDMMYYYY, tempo_DD); strcat(tempo_DDMMYYYY, "\\"); strcat(tempo_DDMMYYYY, tempo_MM); strcat(tempo_DDMMYYYY, "\\"); strcat(tempo_DDMMYYYY, tempo_YYYY); for(i= 0; tempo_DDMMYYYY[i] != '\0'; ++i){ charbufferdata[i].Char.AsciiChar= tempo_DDMMYYYY[i]; charbufferdata[i].Attributes= FOREGROUND_BLUE | FOREGROUND_GREEN; } WriteConsoleOutput(hConsole, charbufferdata, bufsizedata, bufcoorddata, &writeareadata); tempo_DDMMYYYY[0]= '\0'; hh= timeinfo->tm_hour; mm= timeinfo->tm_min; ss= timeinfo->tm_sec; sprintf(tempo_hh, "%02u", hh); sprintf(tempo_mm, "%02u", mm); sprintf(tempo_ss, "%02u", ss); strcat(tempo_hhmmss, tempo_hh); strcat(tempo_hhmmss, ":"); strcat(tempo_hhmmss, tempo_mm); strcat(tempo_hhmmss, ":"); strcat(tempo_hhmmss, tempo_ss); for(i= 0; tempo_hhmmss[i] != '\0'; ++i){ charbufferhora[i].Char.AsciiChar= tempo_hhmmss[i]; charbufferhora[i].Attributes= FOREGROUND_BLUE | FOREGROUND_GREEN; } WriteConsoleOutput(hConsole, charbufferhora, bufsizehora, bufcoordhora, &writeareahora); tempo_hhmmss[0]= '\0'; Sleep(5); } }
  12. O post de Ansi C em segmentation fault (core dumped) !!! foi marcado como solução   
    Esta passagem de caractere como argumento para um parâmetro char* vai causar erro de acesso violado na memória. Ou seja, agora não é mais o arranjo, e sim, o argumento.
     
    Documente seus códigos: Um trecho de código nem sempre é o bastante, e sendo de linguagem C, nunca será, o que faz de C uma linguagem de documentação obrigatória.
     
    Preste atenção nos sinais de alerta emitidos pelo compilador; pois um erro dessa magnitude não passa despercebido por uma Interface bem configurada. 
     
     
    Porque você continua a acessar ponteiros/locais da memoria que não podem ser acessados.
     
     
    Desta vez comunica suas intenções por meio de linhas de código comentadas, não precisa ser muito, um linha já basta.
     
    Não tenha medo de perguntar, questione sempre, na aula em toda parte O.k! 
    Recomendo este site para auto-aprendizagem: https://www.cprogressivo.net/ 
    Um excelente apostila online, com vários exercício resolvidos ...
     
     
    Pode confiar!
  13. O post de Ansi C em Caractere especial saindo errado foi marcado como solução   
    @Gabriel Paulucci Sim, exatamente isso que recomendo que faça. 
    Volte para o mínimo padrão usando "C" no local de "Portuguese",
    Faça isso sempre que desejar imprimir o caractere box-drawing.
     
     
    Você entende isso? 
    O.k!
  14. O post de Ansi C em Trecho de código em C#, o que exatamente ele faz ? foi marcado como solução   
    O que faz? Instancia a cópia de uma instância na posição 0 do arranjo elefante.
    Sugestão: nome o arranjo para elefantes (no plural) ou manada.
     
    O.k!
  15. O post de Ansi C em Problema ao utilizar função modf em C foi marcado como solução   
    Tinha alguns erros lógicos, todos detectáveis pelo compilador, porém o erro mais importante é não use ponto (.) e sim vírgula  para separar os decimais ou cairá em loop-infinito. Com algumas correções seu código fica + ou - assim:
    #include <stdio.h> /**< inclui as funções padrões de entrada e saída. */ #include <stdlib.h> /**< inlcui as funções manipuladoras de memória. */ #include <string.h> /**< inclui as funções manipuladoras de strings. */ #include <locale.h> /**< inclui as funções padrões de localidade. */ #include <math.h> /**< inclui as funções padrões da matemática. */ void funcao_decompoe_numero(); void funcao_cosseno(); int main(int argc, char **argv){ int op; setlocale(LC_ALL,""); printf ("\n\t\t\t"); printf ("Olá usuário, por favor, escolha uma das opções a seguir:\t"); do { op = 0; printf ("\n"); printf("(1) Decompor um número\n"); printf("(2) Determinar cosseno\n"); printf("(3) Sair do programa\n"); printf ("( )\b\b"); scanf("%d", &op); if (op == 1) funcao_decompoe_numero(); if (op == 2) funcao_cosseno(); if (op == 3) printf("Finalizando programa..."); } while (op != 3); return 0; } void funcao_decompoe_numero() { double valor; printf ("Insira o valor que deseja decompor:\t0,0000\b\b\b\b\b\b"); scanf ("%lf", &valor); double i, f; f = modf (valor, &i); printf ("\n"); printf("Parte inteira = %lf/ Parte fracionária = %lf\n", i, f); if (i >= 0.6) printf ("Arrendondar para cima: %.2f\n", ceil(f)); else printf ("Arredondar para baixo: %.2f\n", floor(f)); return ; } void funcao_cosseno() { float valorpi = 3.1415; printf("Usuário, insira um valor em graus para que seja determinado seu"); printf("cosseno: \t"); int valoremgraus; scanf("%d", &valoremgraus); float cosseno; cosseno = cos ((valoremgraus * valorpi) / 180); printf("%.4f", cosseno); return ; } Mais alguma pergunta?
  16. O post de Ansi C em Definição do elemento MINMAX. foi marcado como solução   
    ****| Olá! Sou estudante de Física, e programação em dialeto C' para mim é um hobby.
     
    Eu penso que o seu maior problema não é a questão em si, mas a maneira como está resolvendo, pois tirando um pequeno fragmento de código para exibir os dados, o resto está "emaranhado". Apesar de "simples o problema", você complicou mais quando tentou ler e processar os dados no mesmo bloco de comandos. Eu se fosse você, separaria em 3 situações básicas:
    Leitura Processamento Exibição Pode esquecer o 1, 3 por enquanto e se concentre no item 2 escrevendo com as próprias palavras[sem código], com faria a solução na caneta; Depois aplique a solução real a linguagem. 
  17. O post de Ansi C em assignment makes integer from pointer without a cast foi marcado como solução   
    Podemos passa pelo parâmetro o endereço do ponteiro. E também fiz outras mudanças vejam.
    #include <stdio.h> #include <stdlib.h> void alocacao(char **refs, int t) { *refs = (char *) malloc(t*sizeof(char)); } int main(void) { int i, vogc; int tstring; /* tamanho do strings */ char *string; printf("tamanho da string?"); scanf("%d", &tstring); alocacao(&string, tstring); printf("conteudo da string?"); scanf("%s", string); for (i = 0; i < tstring; i++) { for (vogc = 0; vogc < 10; vogc++) { if ("aeiouAEIOU"[vogc] == string[i]) { putchar("aeiouAEIOU"[vogc]); break; } } } free((void *)string); return 0; }  
    adicionado 12 minutos depois Exatamente, um função que só retorna o ponteiro e um tanto inútil, pois poderia por exemplo chamar malloc dentro da main. Faz muito mais sentido implementações que tenha por objeto aprimorar o uso de malloc.
  18. O post de Ansi C em Como fazer uma tabela foi marcado como solução   
    O segundo printf poderia ficar dentro de um laço, os valores antigos poderiam ser salvos em um ou mais vetores. A cada j-ciclo imprimisse o cabeçario, e o conteúdo do(s) vetor(es).
  19. O post de Ansi C em Calculadora de consumo elétrico foi marcado como solução   
    Olá!
    ### Vamos ver do código abaixo o que mudou no teu.
    #include <locale.h> #include <stdio.h> int main(void) { float quant = 0, consumo = 0, tempo = 0, pot = 0; char op = 0, apar = 0; setlocale(LC_ALL, "Portuguese_Brazil"); printf("\t\tEfficiEnergy+ \n" "\tEscolha uma das opções:\n " "\t1.Calculadora de consumo mensal\n" "\t2.Dicas de economia\n" "\t3.Analisador em tempo real\n\t4.Sair\n\t: "); scanf("%hd", &op); if (op == 1){ printf("Insira o eletrodoméstico ou aparelho que deseja calcular o " "consumo, quantos aparelhos iguais a este possui em sua " "residência e o tempo médio diário em que fica ligado: "); scanf(" %c %f %f", &apar, &quant, &tempo); consumo = (quant * tempo * (30.0 / 1000.0)); switch (apar){ case 'l': printf("O consumo médio é de %gkW por mês", consumo * 200.0); break; default: puts("Erro!"); } } return 0; }  
    pergunte o que desejar.
    adicionado 1 minuto depois formatação é meio louca assim, por conta de incompatibilidades entre IDE online e <> code do fórum.
  20. O post de Ansi C em Existe algum comando em C para voltar o programa? foi marcado como solução   
    Olá.
    Para isso, coloque o menu dentro de: while, for, do, ou até goto.
    do { ... } while(0 != choose); // se choose for igual a 0 então para a repetição (loop) Exemplo assim como while: um variável [choose] que recebe vários valores do menu, quando igual a 0 então não reapresenta o menu que está dentro do{ ... }while 
  21. O post de Ansi C em Erro na lógica programa foi marcado como solução   
    adicionei mais comandos ao código e explicitei melhor a sua lógica@Cristina2000
    #include <stdio.h> int main( void ){ int n, num, num1=0, cont=0, cont1=1; printf( "Digite n\n" ); scanf( "%d", &n ); printf("Digite %d numeros\n", n); scanf( "%d", &num );    num1 = num; cont++; while( cont < n ){ scanf( "%d", &num ); if( num == num1 ) cont1++; else{ if( cont1 > 1 ){ printf( "A sequencia tem %d numeros iguais a %d\n", cont1, num ); cont1 = 1; } num1 = num; } cont++; } return 0; } Testei para: 4 1 2 2 1 a resposta foi {2 e 1} então funcionou para esse caso 50% certo. Pense qual foi o erro mais quais outros encontrar.
  22. O post de Ansi C em Galera como eu faco pra tirar os 0 e parar so nos numeros do vetor foi marcado como solução   
    Você que FOR parando no instante que encontrar o valor 0?
    for(cont=0; cont <= TAM && 0 != vetor[ cont ];cont++)                       { printf(" %d ",vetor[cont]); }  
  23. O post de Ansi C em Não consigo terminar o programa - C++ foi marcado como solução   
    @htilil ! Vejamos:
    int n, a, b, d=0, i=0, menor=9999, vencedor=0; cin >> n; while(i<n){ cin >> a >> b; if(a>=10 && b>=10){ d=a-b; Comentário:
    A variável menor tem o maior valor possível o que nos garante sempre o menor sem testa se está vazio, CERTO!
    Variável vencedor, CERTO.
    Daí o usuário entre com número de competidores e começa as entradas: Só passa no IF quem tem as condições ideias da competição, CERTO. E quem não ELSE: 
    }else{ i++; } i++; Aqui está um problema, pois o variável i que é a contadora de competidores vai incrementar 2 vezes (1- por conta do else do if, e 2- por conta do laço natura do loop). Para corrigir isso é só apagar o else{ i ++; } do código essa ta sobrando na lógica. Pois o i++ do laço deve sempre ser incrementado independente da classificação dos competidores. Fica apenas o ultimo i++; o do else apaga junto.
     
     
    d=a-b; if(d<0){ d=-d; if(d<menor){ menor=d; vencedor=i+1; } }else{ d=d; if(d<menor){ menor=d; vencedor=i+1; } Comentário: Aqui temos a distância sendo calculada certo, Opa!!! percebe que o bloco if(d<0) é praticamente igual ao bloco else, casos assim isolamos a que á de diferente pois ele é o de menos, casos de denominador comum, assim sendo o diferente é apenas o absoluto que pode ficar com simples cláusula  if de uma linha, desse jeito:
    if(d < 0) d = -d; somente isso, depois disso testa d e menor da maneira correta que está. No final dessa parte lógica eliminou-se mais uma cláusula else complicante. Não estava errado, só fizemos encolher o código nesse ponto. O erro era o else do IF que verifica os lançamentos.
     
     
    Ficou de boa?
    ~~ / ~~
  24. O post de Ansi C em contador de numeros pares com recursividade foi marcado como solução   
    Enunciado
    "Construa um programa em C, que identifique a quantidade de números pares existente entre dois números informados pelo usuário. Usar uma função recursiva em lugar de uma estrutura de repetição."  
    O principal conceito aqui é função recursiva, já pesquisou a respeito? (então pesquisa sempre).
     
    #include<stdio.h>/*!< Incluir as rotinas que fazem Entra e Saída (E/S). */ /** * * * * * * * * * * * * * * * * * * * func os_pares - aqui você vai encontrar as seguintes palavras chaves: * return, if, else, int e %, <, ++. <<! Estude cada uma delas !>> * O operador (%) modulus [módulo] retira o resto da divisão a / 2; **/ int os_pares_entre( int x, int y ) { x++;/*!< Tudo começa atualizando seu valor em +1 unidade. */ if( x < y )/*!< testamos se começa não é igual a termina. */ if( x % 2 ) return os_pares_entre( x, y );/*! tem resto é ímpar. */ else return( 1 + os_pares_entre( x, y )); /*! é par então soma 1 */ return 0; }/*!< neste os limites são iguais. /** * * * * * * * * * * * * * * * * * * * func principal - aqui você vai encontrar as seguintes palavras chaves: * int, if, menor que < em C, scanf, printf. <<! Estude cada uma delas !>> **/ int main( void ) { int a, b;/*< ...para entradas do usuário. Supondo ser inteiros */ int quantidade;/*< quantidade de valores pares no instervalo. */ scanf( "%d%d", &a, &b );/*!< pegar do usuário os dois limites */ if( a > b ) /*!< se acaso estão invertidos, desinverte. */ { int tmp = a; a = b; b = tmp; } /*! começa a mágica bem aqui */ quantidade = os_pares_entre( a, b ); printf( "%d\n", quantidade ); /* FIM! */ return( 0x0 ); }  

     
    ~~ / ~~
  25. O post de Ansi C em Cálculo de volume em um exercício simples. foi marcado como solução   
    Ao dividir 1 por 3 o resultado é 0.
    Escreva (1/3.0) e resolverá esse caso.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...