Ir ao conteúdo
  • Cadastre-se

johnsigma

Membro Júnior
  • Posts

    18
  • Cadastrado em

  • Última visita

posts postados por johnsigma

  1. @devair1010

    4 minutos atrás, devair1010 disse:

    @johnsigma      se você puder   poste seu todo , assim poderemos ver como está e em que podemos ajudar   .

    Lista.c:

    #include <stdio.h>
    #include <stdlib.h>
    #include "lista.h"
    #define max 10
    
    struct lista{
        int no[max];
        int fim;
    };
    
    Lista cria_lista(){
        Lista lst;
        lst = (Lista) malloc(sizeof(struct lista));
    
        if(lst != NULL){
            lst->fim = 0;
        }
        return lst;
    }
    
    int lista_vazia(Lista lst){
        if(lst->fim==0)
            return 1; //lista vazia
        else
            return 0; //lista NÃO vazia
    }
    
    int lista_cheia(Lista lst){
        if(lst->fim==max)
            return 1; //lista cheia
        else
            return 0; //lista NÃO cheia
    }
    
    int insere_elem(Lista lst, int elem){
        if(lst == NULL || lista_cheia(lst) == 1)
            return 0; //falha
        lst->no[lst->fim]=elem; //insere o elemento
        lst->fim++; //avança o fim
        return 1; //sucesso
    }
    
    int remove_elem(Lista lst, int elem){
        if(lst==NULL || lista_vazia(lst)==1)
            return 0; //falha
        int i, Aux=0;
    
        while(Aux<lst->fim && lst->no[Aux]!=elem)
            Aux++;
    
        if(Aux==lst->fim) //percorreu a lista inteira
            return 0; //falha, o elemento não está na lista
    
        //se chegou aqui é porque o elemento está na lista
    
        for(i=Aux+1; i<lst->fim; i++)
            lst->no[i-1]=lst->no[i];
    
        lst->fim--;
        return 1; //sucesso na remoção
    }
    
    Lista imprime_lista(Lista lst){
        int i;
        if(lst->fim==0)
            printf("Lista vazia!\n\n");
        else{
            printf("Lista: ");
            for(i=0;i<lst->fim;i++){
                printf("%d ", lst->no[i]);
            }
            printf("\n\n");
        }
    }
    
    int menor_elem(Lista lst){
        if(lst==NULL || lista_vazia(lst)==1)
            return 0;
        int menor, aux;
        for(aux=0;aux<lst->fim;aux++){
            if(aux==0)
                menor=lst->no[aux];
            else
                if(lst->no[aux]<menor)
                    menor=lst->no[aux];
        }
    
        remove_elem(lst,menor);
        return 1;
    }
    
    int tamanho(Lista lst){
        return printf("A lista tem %d elementos!\n", lst->fim);
    }
    
    int insere_inicio(Lista lst, int elem){
        if(lst==NULL || lista_cheia(lst))
            return 0;
    
        int i;
    
        for(i=lst->fim;i>0;i--)
            lst->no[i]=lst->no[i-1];
    
        lst->fim=lst->fim+1;
        lst->no[0]=elem;
        return 1;
    }
    
    int remove_todos(Lista lst, int elem){
        if(lst==NULL || lista_vazia(lst)==1)
            return 0; //falha
        int i, Aux=0;
    
        while(Aux<=lst->fim){
            if(lst->no[Aux]==elem){
                for(i=Aux+1;i<lst->fim;i++)
                    lst->no[i-1]=lst->no[i];
                lst->fim--;
            }
            Aux++;
        }
    
        return 1; //sucesso na remoção
    }
    
    Lista concatenar(Lista lst1, Lista lst2){
        Lista lst3 = (Lista) malloc(sizeof(Lista));
        int i,j;
    
        for(i=0;i<lst1->fim;i++){
            lst3->no[i]=lst1->no[i];
        }
    
        j=lst3->fim;
    
        for(i=0;i<lst2->fim;i++){
            lst3->no[j+1]=lst2->no[i];
        }
    
    
        return lst3;
    }

    lista.h:

    typedef struct lista *Lista;
    Lista cria_lista();
    int lista_vazia(Lista lst);
    int lista_cheia(Lista lst);
    int insere_elem(Lista lst, int elem);
    int remove_elem(Lista lst, int elem);
    Lista imprime_lista(Lista lst);
    int menor_elem(Lista lst);
    int tamanho(Lista lst);
    int insere_inicio(Lista lst, int elem);
    int remove_todos(Lista lst, int elem);
    Lista concatenar(Lista lst1, Lista lst2);

    user.c:

    #include <stdio.h>
    #include <stdlib.h>
    #include "lista.h"
    
    int main(){
    
        Lista lista1,lst1,lst2,lst3;
        lista1=cria_lista();
        lst1=cria_lista();
        lst2=cria_lista();
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        insere_elem(lista1,4);
        insere_elem(lista1,0);
        insere_elem(lista1,2);
        insere_elem(lista1,10);
        insere_elem(lista1,21);
        insere_elem(lista1,7);
        insere_elem(lista1,3);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        remove_elem(lista1,2);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        insere_inicio(lista1,15);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        remove_elem(lista1,21);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        insere_inicio(lista1,16);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        remove_elem(lista1,15);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        menor_elem(lista1);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        insere_elem(lista1,7);
        insere_elem(lista1,7);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        insere_inicio(lista1,7);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        remove_todos(lista1,7);
    
        tamanho(lista1);
        imprime_lista(lista1);
    
        printf("\n");
    
        insere_elem(lst1,4);
        insere_elem(lst1,12);
        insere_elem(lst1,0);
    
        insere_elem(lst2,11);
        insere_elem(lst2,18);
        insere_elem(lst2,25);
    
        lst3=concatenar(lst1,lst2);
    
        imprime_lista(lst3);
    
        return 0;
    }

    Obs: a função concatenar também não está funcionando, se conseguirem me ajudar nela também!

    • Curtir 2
  2. @devair1010

    6 minutos atrás, devair1010 disse:

    @johnsigma     você poderia colocar assim  :

    
    int menor_elem(Lista lst){
        if(lst==NULL || lista_vazia(lst)==1)
            return 0; //falha
        int menor, aux,pos;
        menor=lst->no[0];
        for(aux=0;aux<lst->fim;aux++){
            if(lst->no[aux]<menor)
                menor=lst->no[aux];
                pos=aux;
        }
        list->no[pos] = NULL;
        /*remove_elem(lst,menor);*/
        return 1; //sucesso
    }

     

    Não deu certo, ele não remove o elemento. Acho que não dá pra fazer esse exercício percorrendo apenas uma vez, pois como a lista não é ordenada então sempre tem que percorrê-la inteira para tentar achar o elem.

    • Curtir 1
  3. Estou com dificuldade em remover o menor elemento em uma lista estática/sequencial, fiz uma maneira onde eu acho o menor valor em uma unção e nela mesmo eu chamo uma função de remover passando o menor valor para remover, desse forma está funcionando mas minha professora quer que a função percorra a lista apenas uma vez e dessa forma iria percorrer duas. Vou deixar o código e espero que me ajudem.

    Obs: se alguém quiser ajudar também com esse mesmo problema mas na lista dinâmica/encadeada com cabeçalho, também ajudaria.

    Obs2: a função remove_elem funciona normal, mas preciso remover o menor sem chamar ela.

     

    int menor_elem(Lista lst){
        if(lst==NULL || lista_vazia(lst)==1)
            return 0; //falha
        int menor, aux;
        for(aux=0;aux<lst->fim;aux++){
            if(aux==0)
                menor=lst->no[aux];
            else
                if(lst->no[aux]<menor)
                    menor=lst->no[aux];
        }
        
        remove_elem(lst,menor);
        return 1; //sucesso
    }

     

    • Curtir 1
  4. Olá, estou com um exercício da faculdade que não consegui resolver, é um exercício onde preciso utilizar ponteiro para ponteiro em uma struct mas estou muito perdido na sintaxe. o exercício é o seguinte:

    Faça uma struct com dois campos, uma string para nome e um int para armazenar um número inteiro. Na main peça para o usuário digitar o tamanho do array da struct. Crie uma função para alocar dinamicamente esse array de struct e ler os dados digitados pelo usuário. Faça uma função que verifica os números pares digitados pelo usuário na struct e se o número for par dentro do if se chama outra função para manipular esse número par passando toda a struct, essa função deve receber a struct mas manipular apenas o número par dela e dividi-lo por 2 alterando a struct original. No final o programa deve imprimir na main o array dos números.

     

    Eu consegui fazer alocando na própria main, mas dessa forma com uma função separada não consegui. Vou deixar meu código, que deve ter vários erros mas serve pra ilustrar bem o que o exercício pede.

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    
    struct dados{
        char nome[5];
        int num;
    };
    
    typedef struct dados dado;
    
    void manipula_um_par(dado **q){
        **q.num=**q.num/2;
    }
    
    void manipula_pares(dado **q,int *x){
        int i;
        for(i=0;i<*x;i++){
            if(*(*q[i]).num%2==0){
                manipula_um_par(&q[i]);
            }
        }
    }
    
    void define_structs(int *n, dado *q){
        dado *p;
        int i;
        p = (dado *) malloc(*n*sizeof(dado));
        printf("\n");
        for(i=0;i<*n;i++){
            printf("Digite o %dº nome: ",i+1);
            gets(p[i].nome);
            setbuf(stdin,NULL);
            printf("Digite o %dº número: ",i+1);
            scanf("%d", &p[i].num);
            setbuf(stdin,NULL);
            printf("\n");
        }
        q=&p;
    }
    
    int main(){
    
    setlocale(LC_ALL, "Portuguese_Brazil");
    
        int n, i;
        dado **q;
    
        printf("Digite o tamanho do vetor de struct: ");
        scanf("%d",&n);
        setbuf(stdin,NULL);
    
        q = (dado *) malloc(n*sizeof(dado));
    
        define_structs(&n,q);
    
        manipula_pares(q,&n);
    
        for(i=0;i<n;i++){
            printf("%d\n", **q[i].num);
        }
    
        printf("\n");
    
        return 0;
    }

     

  5. Em 08/12/2018 às 18:29, vangodp disse:

    mande seu progresso para eu ter uma ideia onde você ta errando

    adicionado 6 minutos depois

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <string.h>
    #include <math.h>
    
    struct endereco{
        char rua[20];
        char num[6];
        char bairro[20];
        char cep[15];
        char cidade[20];
        char estado[35];
    };
    
    struct data{
        char dia[3];
        char mes[25];
        char ano[5];
    };
    
    struct funcionario{
        char nome[50];
        struct data d;
        struct endereco e;
        float salario;
    };
    
    void dados(int *x, struct funcionario *j){
        int i;
        for(i=0;i<*x;i++){
            printf("%dº funcionário:\n",i+1);
            printf("Nome: ");
            gets(j[i].nome);
            setbuf(stdin,NULL);
            printf("Dia do nascimento: ");
            gets(j[i].d.dia);
            setbuf(stdin,NULL);
            printf("Mês do nascimento: ");
            gets(j[i].d.mes);
            setbuf(stdin,NULL);
            printf("Ano do nascimento: ");
            gets(j[i].d.ano);
            setbuf(stdin,NULL);
            printf("Rua: ");
            fgets(j[i].e.rua,20,stdin);
            setbuf(stdin,NULL);
            printf("Número: ");
            fgets(j[i].e.num,6,stdin);
            setbuf(stdin,NULL);
            printf("Bairro: ");
            fgets(j[i].e.bairro,20,stdin);
            printf("CEP: ");
            fgets(j[i].e.cep,15,stdin);
            printf("Cidade: ");
            fgets(j[i].e.cidade,20,stdin);
            printf("Estado: ");
            fgets(j[i].e.estado,35,stdin);
            printf("Salário: ");
            scanf("%f",&j[i].salario);
            setbuf(stdin,NULL);
            printf("\n");
        }
    }
    
    void compara_salario(int *x, struct funcionario *j){
        int i;
        float *ms;
        char nomem[50];
        for(i=0;i<*x;i++){
            if(i==0){
                ms=&j[i].salario;
                strcpy(nomem,j[i].nome);
            }
            else{
                if(*ms<j[i].salario){
                    ms=&j[i].salario;
                    strcpy(nomem,j[i].nome);
                }
            }
        }
        printf("Funcionário com o maior salário: %s",nomem);
    }
    
    int main(){
    
    setlocale(LC_ALL, "Portuguese_Brazil");
    
        int n,i,*k;
    
        printf("Digite a quantidade de funcionários: ");
        scanf("%d",&n);
        printf("\n");
        setbuf(stdin,NULL);
    
        struct funcionario *f;
        f=(struct funcionario*) malloc(n*sizeof(f));
        k=&n;
    
        dados(k,f);
        compara_salario(k,f);
    
        return 0;
    }

    Esse é o código, tá funcionando, mas ele exibe apenas um nome pois não sei como fazer para aparecer mais de um se os os funcionário tiverem o mesmo salário e esse salário seja o máximo

  6. 4 minutos atrás, vangodp disse:

    Não entendi o que você quer dize... Essa é a forma correta de declarar o vetor de alunos.

    É que o meu ficou assim:

    struct cadastro *c;
     c=(struct cadastro*) malloc(n*sizeof(c));

    E não assim: 

    struct cadastro *c;
    c=(struct cadastro*) malloc(n*sizeof(cadastro));

     

    11 minutos atrás, vangodp disse:

    Suponho que seu problema não é encontrar os tais valores e nem anotar quais são os assalariados agraciados. Da a entender que seu problema é somente retornar os valores. A solução seria ponteiros, ou retornar uma struct com tudo dentro.

    O problema é mais simples ainda. Vou anexar um print do problema. Não estou conseguindo fazer a segunda função pois se 2(ou mais) funcionários tiverem o mesmo salário(e esse salário seja o máximo) eu tenho que exibir o nome dos dois. Eu sei fazer apenas com 1, e nesse caso o programa iria ignorar um(ou mais) dos funcionários com maior salário!

    2018024480_Semttulo.png.b7ca7a327251b4a167277b9ba14ad4fd.png 

  7. 20 minutos atrás, vangodp disse:

    Para que você entenda mais ou menos, simplificando...
     

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct Dados {
        char nome[20];
        char sobrenome[30];
        char ano[10];
        int dias[6];
    } dados;
    
    int main() {
        int n = 10; // numero de elementos a pedir por teclado
        
        dados *lista; //Ponteiro a dados
        
        lista = ( dados* ) malloc ( n * sizeof ( dados ) ); //vetor de dados
        
        //Exemplo de uso
        strcpy( lista[0].nome, "Leopoldo");
        lista[0].dias[0] = 1;
        
        printf("Nome: %s", lista[0].nome);
        
        free ( lista );//Liberando
        
        return 0;
    }

     

     

    valeu demais, deu certo aqui. Mas ali no caso quando eu criei o vetor de dados eu tive que colocar o nome do ponteiro da struct. Então no seu exemplo ficaria: lista=(dados*) malloc(n*sizeof(lista));

     

    Outra dúvida: Tenho um exercício que tenho que criar uma função para exibir os funcionário de maior salário(se tiver mais de 1 funcionário com salários iguais e esses forem os maiores). Como eu faço pra fazer essa função e ela retornar os funcionários com os maiores salário independente de quantos funcionários tem? Consigo fazer apenas com um, e se houver mais de 1 funcionário com salário igual ao do maior ele exibe apenas 1 deles!

  8. Tenho esse algoritmo pra fazer:

    Codifique, compile e execute um programa em C que declare na função principal uma estrutura
    para o cadastro de alunos de uma academia. a) Para cada aluno armazenar: nome, sobrenome (apenas um), ano de nascimento e um vetor de 6
    posições indicando quais dias da semana o aluno frequenta a academia. Lembrando que a
    academia funciona de segunda a sábado;
    b) Ao iniciar o programa, o usuário deverá informar o número de alunos que serão armazenados;
    c) O programa deverá alocar dinamicamente a quantidade necessária de memória para armazenar
    os registros dos alunos;
    d) O programa deverá pedir ao usuário que entre com as informações dos alunos;
    e) Ao final, o programa deve exibir na tela os dados armazenados e liberar a memória alocada. Não esqueça de usar funções para estruturar o seu código.

    Consegui fazê-lo rodar mas sem o uso de ponteiro e creio que estou confundindo o conceito de ponteiro e alocação dinâmica. Então gostaria que avaliassem meu código e dissessem o que estou fazendo de errado.

    Código:

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <string.h>
    #include <math.h>
    
    int main(){
    
    setlocale(LC_ALL, "Portuguese_Brazil");
    
        struct cadastro{
            char nome[20];
            char sobrenome[30];
            char ano[10];
            int dias[6];
        };
    
        int n,i,j,*p;
    
        printf("Digite quantos alunos cadastrar: ");
        scanf("%d",&n);
        setbuf(stdin,NULL);
        printf("\n");
    
        p=(int *) malloc(n*sizeof(int));
    
        struct cadastro c[*p];
    
        for(i=0;i<n;i++){
            printf("%dº aluno para cadastrar:\n\n",i+1);
            printf("Nome: ");
            fgets(c[p[i]].nome,20,stdin);
            setbuf(stdin,NULL);
            printf("Sobrenome (apenas um): ");
            gets(c[p[i]].sobrenome);
            setbuf(stdin,NULL);
            printf("Ano de nascimento: ");
            gets(c[p[i]].ano);
            setbuf(stdin,NULL);
            printf("\nDias na semana que frequenta a academia (0 para não; 1 para sim):\n");
            setbuf(stdin,NULL);
            for(j=0;j<6;j++){
                printf("Dia %d: ",j+1);
                scanf("%d",&c[p[i]].dias[j]);
                setbuf(stdin,NULL);
            }
            printf("\n\n");
        }
    
        printf("\n\nDados cadastrados dos alunos: \n\n");
    
        for(i=0;i<n;i++){
            printf("%dº aluno: \n",i+1);
            printf("Nome: %s",c[p[i]].nome);
            printf("Sobrenome: %s\n",c[p[i]].sobrenome);
            printf("Ano de nascimento: %s\n",c[p[i]].ano);
            printf("O aluno foi na academia nos seguintes dias:\n");
                if(c[p[i]].dias[0]==1)
                    printf("Segunda, ");
                if(c[p[i]].dias[1]==1)
                    printf("Terça, ");
                if(c[p[i]].dias[2]==1)
                    printf("Quarta, ");
                if(c[p[i]].dias[3]==1)
                    printf("Quinta, ");
                if(c[p[i]].dias[4]==1)
                    printf("Sexta, ");
                if(c[p[i]].dias[5]==1)
                    printf("Sábado");
            printf("\n\n\n");
        }
      
      free(p);
    
        return 0;
    }

     

  9. 3 horas atrás, HwapX disse:

    Seu problema está na comparação do sexo:

    
    if(sexo=="feminino" && idade<25){

    Em C não é possível comparar strings dessa forma, você deve utilizar a função strcmp(http://www.cplusplus.com/reference/cstring/strcmp/)

    
    if(strcmp(sexo, "feminino") == 0 && idade<25){

     Você pode conferir o resultado em: https://ideone.com/m5HEpY.

    Tem alguma outra forma de comparar String sem usar a função Strcmp? Uma forma mais manual?

    • Curtir 1
    • Obrigado 1
  10. Fiz um programa com o seguinte comando: "Ler nome, sexo e idade. Se sexo for feminino e idade menor que 25, imprime o nome da
    pessoa e a palavra “ACEITA”, caso contrario imprimir “NÃO ACEITA”.". Fiz o programa porém quando digito sexo 'feminino' e idade abaixo de 25 ele retorna "Não aceito" ao invés de "Aceito". O que pode tá errado no meu código?

    Código:

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

    int main(){

    setlocale(LC_ALL, "Portuguese_Brazil");

    char nome[200];
    int idade;
    char sexo[50];

    setbuf(stdin, NULL);

    printf("Digite seu nome: ");
    gets(nome);

    printf("Digite seu sexo: ");
    gets(sexo);

    printf("Digite sua idade: ");
    scanf("%d",&idade);

    if(sexo=="feminino" && idade<25){
    printf("\\n%s\\n",nome);
    printf("Situação: Aceita.\\n");
    }else{
    printf("\\n%s\\n",nome);
    printf("Situação: Não aceita.\\n");
    }

    return 0;
    }

    OBS: Não quero apenas outra forma de escrever o programa(mas se quiser pode colocar), quero saber porque esse código está dando errado!

    • Curtir 1
    • Obrigado 1
  11. Eae galera, é o seguinte, toda vez que eu conecto algum dispositivo na porta USB 3.0 do meu notebook ele dá tela azul e reinicia, não sei por que está acontecendo, isso está ocorrendo de umas 2-1 semana atrás, não acredito que seja o Hardware pois ele nunca sofreu uma queda. Passei o Drivers Booster nele e atualizei todos os drivers, se alguém tem alguma opinião que possa me ajudar agradeceria muito, uso o Windows 7 Ultimate 64bits. Se precisarem de mais informações sobre o PC me perguntem!

  12. Instalei o Xampp(o Xampp para Windows só possui versão 32bits) no meu Windows 7 Ultimate 64bits e todas as ferramentas do programa iniciam normalmente, mas apenas o Apache não inicia e volta a seguinte mensagem: "O aplicativo não pôde ser inicializado corretamente (0xc000007b). Clique em OK para fechar o aplicativo.". Procurando na net vi alguns tutoriais para corrigir o problema, mas nenhum funcionou, já tentei reinstalar várias versões do Microsoft Visual C++ e nada, baixei algumas dlls e coloquei nas pastas do sistema e na pasta do Apache e nada. Alguém sabe resolver esse erro especificamente para o Apache e se não souberem me recomendem aplicativos similares ao Xampp, pois preciso dele para desenvolver PHP.

     

  13. 15 horas atrás, EssaCidadeÉQuente disse:

    @johnsigma Já tentou atualizar com o Drive Booster? Ou também clicando na bandeira do Windows>Botão direito no Computador e ir em propriedades>Gerenciador de dispositivos e atualizar por lá?

    Pelo gerenciador de tarefas eu já tentei sim, mas vou tentar pelo Drive Booster, valeu.

    adicionado 29 minutos depois
    28 minutos atrás, johnsigma disse:

    Pelo gerenciador de tarefas eu já tentei sim, mas vou tentar pelo Drive Booster, valeu.

    Cara, baixei o Driver Booster e funcionou, descobri que meu driver de rede não era intel e sim Atheros. Obrigado pela ajuda, muito obrigado mesmo!

  14. Tenho um notebook da Acer, modelo E5-571-51AF, que veio com o Windows 8 de fábrica, depois atualizei para o Windows 10, só que não gostei muito, então formatei ele e instalei o Windows 7. Tava tudo normal, instalei os drivers direto do site da Acer, só que quando baixei o driver de rede wifi, que é o Intel Proset/Wireless, ele instala o driver e quando executa fala que o drive não está instalado e nesse programa eu não posso mexer em nada, por que supostamente eu não instalei o driver. 
    Obs: Quando eu vou em "Gerenciar Redes Sem Fio" no próprio windows ele me dá a seguinte mensagem: "Opção sem fio não habilitada atualmente.", e no programa Speccy quando vou na aba "Network" ele diz que meu WiFi está desabilitado.
    Obs²: Já utilizei o atalho do "Fn", que no caso do meu notebook é "Fn + F3", e não apareceu nada e também de nada adiantou.
    Espero que alguém possa me ajudar, pois já procurei em um monte de lugar e não achei a solução para deixar meu WiFi funcional, e não quero voltar pro Windows8/8.1/10. Desde já agradeço, e se precisarem de mais alguma informação me avisem que eu a forneço!

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!