Ir ao conteúdo

Posts recomendados

Postado

preciso montar uma lista encadeada que tenha as seguintes funcoes:

SUPERMERCADO. Para cada produto devem ser cadastrados nome, código, preço e quantidade em estoque. Os dados devem ser armazenados em uma lista simplesmente encadeada que não precisa ser ordenada. As funções desta lista devem ser: - Cadastrar: insere um novo produto no final da lista.

- Retirar: retira um produto da lista, cujo código foi dado pelo usuário

 - Exibir: Exibe todos os dados dos produtos da lista.

- Alterar preço: altera o preço de um produto da lista, cujo código foi dado pelo usuário.

- Alterar quantidade: altera a quantidade de um produto da lista, cujo código foi dado pelo usuário.

- Exibir estoque baixo: Exibe somente o nome e o código de todos os produtos da lista com estoque menor que 10 unidades

  • Obrigado 1
  • Haha 1
  • Triste 1
  • 1 ano depois...
Postado

@Rafael Rios

Passei a madrugada toda fazendo isso... ainda não consegui rodar. Quem quiser corrigir fique a vontade, to indo dormir e depois resolvo kkkkkkkkk

 


 

#include <iostream>

#include <stdlib.h>

#include <string>



using namespace std;



typedef struct{

int cod;

int quant;

string nome;

}Lista;



void insere(Lista *ptr){

    Lista *aux;



while(ptr->cod>1){

ptr;

};

if(ptr){

cout<<"Descreva o nome do produto: "<<endl;

cin>>ptr->nome;



cout<<"Descreva a quantidade: "<<endl;

cin>>ptr->quant;



ptr->cod=aux->cod;



cout<<"Codigo eh: "<<ptr->cod<<endl;




}else{

    cout<<"não há mais espaco"<<endl;

   

};



};



void remove(Lista *ptr){

    int cod;



    cout<<"Descreva qual o codigo do produto que deseja remover "<<endl;

    cin>>cod;



while(ptr->cod){



    if(ptr->cod<1){

        cout<<"codigo informado não encontrado"<<endl;

       

        };



    if(cod==ptr->cod){

        ptr->cod=0;

        ptr->nome='0';

        ptr->quant=0;

       

        };



    ptr++;

};




};



void quantidade(Lista *ptr){

int cod,quant;



cout<<"Descreva qual o codigo do produto que deseja alterar"<<endl;

cin>>cod;

cout<<"Descreva a quantidade do item"<<endl;

cin>>quant;



if(quant<1){

cout<<"quantidade invalida"<<endl;

quantidade(ptr);

};



while(ptr->cod){



    if(ptr->cod<1){

        cout<<"codigo informado não encontrado"<<endl;

       

        };



    if(cod==ptr->cod){

        ptr->quant=quant;

       

        };



    ptr;

    };      



};



void lowquant(Lista *ptr){

    int cod;

    cout<<"Descreva qual o codigo do produto que deseja remover "<<endl;

    cin>>cod;



while(ptr->cod>1){



    if(ptr->quant<10){

        cout<<"protudo com baixa quantidade: "<<ptr->cod<<endl;

        };



    ptr;

};

};



void todos(Lista *ptr){

    cout<<"Lista de produtos: \n\n"<<endl;



    while(ptr->cod>1){

        cout<<"Codigo: "<<ptr->cod<<" Nome:  "<<ptr->nome<<" Quantidade:  "<<ptr->quant<<endl;

    ptr;

};



};




int main(){

    Lista oo, *ptr;

    int op,i=1;

    *ptr=oo;



   

   

while(i!=0){

    cout<< "escolha o caso"<< endl;

    cout<<"1: inserir produto"<< endl;

    cout<<"2: remove produto"<< endl;

    cout<<"3: alterar quantidade"<<endl;

    cout<<"4: exibir produtos com baixa quantidade"<<endl;

    cout<<"5: Exibir todos os produtos da lista"<<endl;

    cout<<"Digite qualquer tecla para sair"<<endl;

    cin>>op;

   

    switch(op){

    case 1:

        insere(ptr);

        break;

    case 2:

        remove(ptr);

        break;

    case 3:

        quantidade(ptr);

        break;

    case 4:

        lowquant(ptr);

        break;

    case 5:

        todos(ptr);

        break;

    default:

        cout<<"não vai sair não trouxa"<<endl;

        break;

    };    



    cout<<"Quer continuar? \n\n Sim: digite qualquer tecla \nNao: digite 0"<<endl;    

    cin>>i;  

    };

    return 0;

};

 

  • Curtir 1
Postado

@Rafael Rios @Rafael Rios

Apenas corrigindo meu codigo...

Se ajudei, deixa o likezada ai kkkkk

 

 

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

using namespace std;

typedef struct{
int cod;
int quant;
string nome;
}Lista;

void insere(Lista *ptr){
    Lista *aux;

while(ptr->cod>1){
ptr++;
};
if(ptr){
cout<<"Descreva o nome do produto: "<<endl;
cin>>ptr->nome;

cout<<"Descreva a quantidade: "<<endl;
cin>>ptr->quant;

ptr->cod=aux->cod;

cout<<"Codigo eh: "<<ptr->cod<<endl;


}else{
    cout<<"não há mais espaco"<<endl;
    
};

};

void remove(Lista *ptr){
    int cod;

    cout<<"Descreva qual o codigo do produto que deseja remover "<<endl;
    cin>>cod;

while(ptr->cod){ 

    if(ptr->cod<1){
        cout<<"codigo informado não encontrado"<<endl;
        
        };

    if(cod==ptr->cod){
        ptr->cod=0;
        ptr->nome='0';
        ptr->quant=0;
        
        };

    ptr++;
};


};

void quantidade(Lista *ptr){
int cod,quant;

cout<<"Descreva qual o codigo do produto que deseja alterar"<<endl;
cin>>cod;
cout<<"Descreva a quantidade do item"<<endl;
cin>>quant;

if(quant<1){
cout<<"quantidade invalida"<<endl;
quantidade(ptr);
};

while(ptr->cod){ 

    if(ptr->cod<1){
        cout<<"codigo informado não encontrado"<<endl;
        
        };

    if(cod==ptr->cod){
        ptr->quant=quant;
        
        };

    ptr++;
    };      

};

void lowquant(Lista *ptr){
    int cod;
    cout<<"Descreva qual o codigo do produto que deseja remover "<<endl;
    cin>>cod;

while(ptr->cod>1){ 

    if(ptr->quant<10){
        cout<<"protudo com baixa quantidade: "<<ptr->cod<<endl;
        };

    ptr++;
};
};

void todos(Lista *ptr){
    cout<<"Lista de produtos: \n\n"<<endl;

    while(ptr->cod>1){ 
        cout<<"Codigo: "<<ptr->cod<<" Nome:  "<<ptr->nome<<" Quantidade:  "<<ptr->quant<<endl;
    ptr++;
};

};


int main(){
    Lista oo, *ptr;
    ptr = &oo;
    int op;
    int i=1;
    

    cout<< "escolha o caso"<< endl;
    cout<<"1: inserir produto"<< endl;
    cout<<"2: remove produto"<< endl;
    cout<<"3: alterar quantidade"<<endl;
    cout<<"4: exibir produtos com baixa quantidade"<<endl;
    cout<<"5: Exibir todos os produtos da lista"<<endl;
    cout<<"Digite qualquer tecla para sair"<<endl;
    cin>>op;
    
while(i!=0){
    

    switch(op){
    case 1:
        insere(ptr);
    case 2:
        remove(ptr);
    case 3:
        quantidade(ptr);
    case 4:
        lowquant(ptr);
    case 5:
        todos(ptr);
    default:
        cout<<"não vai sair não trouxa"<<endl;
        break;
    }  

    cout<<"Quer continuar? \n\n Sim: digite qualquer tecla \nNao: digite 0"<<endl;    
    cin>>i;   
    };
    return 0;
};

 

  • Curtir 1
  • Obrigado 1
Postado

@Breno Busnello Não sei se está errado. Não testei seu programa.

 

Mas é um programa em C. E não há razão para escrever isso em C++. Vai ter muito mais trabalho e vai aprender muito menos, ou nada de C++.

 

Não entendi a razão de tanto espaço em branco. Só dificulta ler o código. Tem quase 1 metro eu acho.

 

Veja o seu código sem aquilo tudo:

 

#include <stdlib.h>
#include <iostream>
#include <string>
using namespace std;

typedef struct
{
  int cod;
  int quant;
  string nome;
} Lista;


void
insere(Lista* ptr)
{
  Lista* aux;
  while (ptr->cod > 1) {
    ptr;
  };
  if (ptr) {
    cout << "Descreva o nome do produto: " << endl;
    cin >> ptr->nome;
    cout << "Descreva a quantidade: " << endl;
    cin >> ptr->quant;
    ptr->cod = aux->cod;
    cout << "Codigo eh: " << ptr->cod << endl;
  } else {
    cout << "não há mais espaco" << endl;
  };
};


void
remove(Lista* ptr)
{
  int cod;
  cout << "Descreva qual o codigo do produto que deseja "
          "remover "
       << endl;
  cin >> cod;
  while (ptr->cod) {
    if (ptr->cod < 1) {
      cout << "codigo informado não encontrado" << endl;
    };
    if (cod == ptr->cod) {
      ptr->cod = 0;
      ptr->nome = '0';
      ptr->quant = 0;
    };
    ptr++;
  };
};


void
quantidade(Lista* ptr)
{
  int cod, quant;
  cout << "Descreva qual o codigo do produto que deseja "
          "alterar"
       << endl;
  cin >> cod;
  cout << "Descreva a quantidade do item" << endl;
  cin >> quant;
  if (quant < 1) {
    cout << "quantidade invalida" << endl;
    quantidade(ptr);
  };
  while (ptr->cod) {
    if (ptr->cod < 1) {
      cout << "codigo informado não encontrado" << endl;
    };
    if (cod == ptr->cod) {
      ptr->quant = quant;
    };
    ptr;
  };
};


void
lowquant(Lista* ptr)
{
  int cod;
  cout << "Descreva qual o codigo do produto que deseja "
          "remover "
       << endl;
  cin >> cod;
  while (ptr->cod > 1) {
    if (ptr->quant < 10) {
      cout << "protudo com baixa quantidade: " << ptr->cod << endl;
    };
    ptr;
  };
};


void
todos(Lista* ptr)
{
  cout << "Lista de produtos: \n\n" << endl;
  while (ptr->cod > 1) {
    cout << "Codigo: " << ptr->cod << " Nome:  " << ptr->nome
         << " Quantidade:  " << ptr->quant << endl;
    ptr;
  };
};


int
main()
{
  Lista oo, *ptr;
  int op, i = 1;
  *ptr = oo;
  while (i != 0) {
    cout << "escolha o caso" << endl;
    cout << "1: inserir produto" << endl;
    cout << "2: remove produto" << endl;
    cout << "3: alterar quantidade" << endl;
    cout << "4: exibir produtos com baixa quantidade" << endl;
    cout << "5: Exibir todos os produtos da lista" << endl;
    cout << "Digite qualquer tecla para sair" << endl;
    cin >> op;
    switch (op) {
      case 1:
        insere(ptr);
        break;
      case 2:
        remove(ptr);
        break;
      case 3:
        quantidade(ptr);
        break;
      case 4:
        lowquant(ptr);
        break;
      case 5:
        todos(ptr);
        break;
      default:
        cout << "não vai sair não trouxa" << endl;
        break;
    };
    cout << "Quer continuar? \n\n Sim: digite qualquer "
            "tecla \nNao: digite 0"
         << endl;
    cin >> i;
  };
  return 0;
};

 

Sobre o código como postado, mas sem as linhas em branco:

 

(26): error C4700: uninitialized local variable 'aux' used
(116): error C4700: uninitialized local variable 'ptr' used

 

Meu compilador diz isso. E ele está certo. Corrija.

  • para que tem um include de stdlib? o que estaria usando da biblioteca padrão C? E a convenção não é essa. Deve usar cstdlib.
  • não há razão para usar typedef em C++
  • main deve ser a primeira função do código, se possível em um arquivo separado
  • C++ tem listas. Basta declarar e usar
  • não escreva um programa interativo. É um desastre. Só vai perder MUITO tempo. Teste as coisas primeiro

Sobre uma lista

 

Entenda que uma estrutura de dados é um container. É uma lista de coisas. Quaisquer coisas.

 

A lista é de nós. E cada nó aponta para ou contém uma coisa. No seu caso parece ser algo como um item de estoque com código, quantidade e nome.

 

typedef struct
{
  int cod;
  int quant;
  string nome;
} Lista;

 

Isso que postou não é uma Lista, não é um nó. É apenas um item. Não faz sentido. Tem um livro de estruturas de dados? Seu curso adota um livro? 

 

  Lista oo, *ptr;

 

Que significa? Declarou um ponteiro que não aponta para nada. 

E usa ponteiros no seu programa que não tem nenhum tipo de alocação? 

 

    switch (op) {
      case 1:
        insere(ptr);
        break;
      case 2:
        remove(ptr);
        break;
      case 3:
        quantidade(ptr);
        break;
      case 4:
        lowquant(ptr);
        break;
      case 5:
        todos(ptr);
        break;
      default:
        cout << "não vai sair não trouxa" << endl;
        break;
    };

 

Nunca escreva um programa interativo. Só vai perder MUITO tempo.

 

Note que esse switch aí tem todas essas funções acessando um ponteiro da suposta lista. 

 

Pois é: essa é a diferença maior entre C e C++. Essas funções devem estar DENTRO da struct. Essa é a vantagem (enorme) de representar coisas em C++

 

Você tem um livro sobre C++? 

 

Seu curso é sobre a linguagem ou estruturas de dados?

 

Seu programa está sim errado. Está longe de funcionar e escrito na linguagem errada. 😞 

  • Obrigado 1
  • 4 meses depois...
Postado
Em 06/09/2022 às 22:37, arfneto disse:

@Breno Busnello Não sei se está errado. Não testei seu programa.

 

Mas é um programa em C. E não há razão para escrever isso em C++. Vai ter muito mais trabalho e vai aprender muito menos, ou nada de C++.

 

Não entendi a razão de tanto espaço em branco. Só dificulta ler o código. Tem quase 1 metro eu acho.

 

Veja o seu código sem aquilo tudo:

 

#include <stdlib.h>
#include <iostream>
#include <string>
using namespace std;

typedef struct
{
  int cod;
  int quant;
  string nome;
} Lista;


void
insere(Lista* ptr)
{
  Lista* aux;
  while (ptr->cod > 1) {
    ptr;
  };
  if (ptr) {
    cout << "Descreva o nome do produto: " << endl;
    cin >> ptr->nome;
    cout << "Descreva a quantidade: " << endl;
    cin >> ptr->quant;
    ptr->cod = aux->cod;
    cout << "Codigo eh: " << ptr->cod << endl;
  } else {
    cout << "não há mais espaco" << endl;
  };
};


void
remove(Lista* ptr)
{
  int cod;
  cout << "Descreva qual o codigo do produto que deseja "
          "remover "
       << endl;
  cin >> cod;
  while (ptr->cod) {
    if (ptr->cod < 1) {
      cout << "codigo informado não encontrado" << endl;
    };
    if (cod == ptr->cod) {
      ptr->cod = 0;
      ptr->nome = '0';
      ptr->quant = 0;
    };
    ptr++;
  };
};


void
quantidade(Lista* ptr)
{
  int cod, quant;
  cout << "Descreva qual o codigo do produto que deseja "
          "alterar"
       << endl;
  cin >> cod;
  cout << "Descreva a quantidade do item" << endl;
  cin >> quant;
  if (quant < 1) {
    cout << "quantidade invalida" << endl;
    quantidade(ptr);
  };
  while (ptr->cod) {
    if (ptr->cod < 1) {
      cout << "codigo informado não encontrado" << endl;
    };
    if (cod == ptr->cod) {
      ptr->quant = quant;
    };
    ptr;
  };
};


void
lowquant(Lista* ptr)
{
  int cod;
  cout << "Descreva qual o codigo do produto que deseja "
          "remover "
       << endl;
  cin >> cod;
  while (ptr->cod > 1) {
    if (ptr->quant < 10) {
      cout << "protudo com baixa quantidade: " << ptr->cod << endl;
    };
    ptr;
  };
};


void
todos(Lista* ptr)
{
  cout << "Lista de produtos: \n\n" << endl;
  while (ptr->cod > 1) {
    cout << "Codigo: " << ptr->cod << " Nome:  " << ptr->nome
         << " Quantidade:  " << ptr->quant << endl;
    ptr;
  };
};


int
main()
{
  Lista oo, *ptr;
  int op, i = 1;
  *ptr = oo;
  while (i != 0) {
    cout << "escolha o caso" << endl;
    cout << "1: inserir produto" << endl;
    cout << "2: remove produto" << endl;
    cout << "3: alterar quantidade" << endl;
    cout << "4: exibir produtos com baixa quantidade" << endl;
    cout << "5: Exibir todos os produtos da lista" << endl;
    cout << "Digite qualquer tecla para sair" << endl;
    cin >> op;
    switch (op) {
      case 1:
        insere(ptr);
        break;
      case 2:
        remove(ptr);
        break;
      case 3:
        quantidade(ptr);
        break;
      case 4:
        lowquant(ptr);
        break;
      case 5:
        todos(ptr);
        break;
      default:
        cout << "não vai sair não trouxa" << endl;
        break;
    };
    cout << "Quer continuar? \n\n Sim: digite qualquer "
            "tecla \nNao: digite 0"
         << endl;
    cin >> i;
  };
  return 0;
};

 

Sobre o código como postado, mas sem as linhas em branco:

 

(26): error C4700: uninitialized local variable 'aux' used
(116): error C4700: uninitialized local variable 'ptr' used

 

Meu compilador diz isso. E ele está certo. Corrija.

  • para que tem um include de stdlib? o que estaria usando da biblioteca padrão C? E a convenção não é essa. Deve usar cstdlib.
  • não há razão para usar typedef em C++
  • main deve ser a primeira função do código, se possível em um arquivo separado
  • C++ tem listas. Basta declarar e usar
  • não escreva um programa interativo. É um desastre. Só vai perder MUITO tempo. Teste as coisas primeiro

Sobre uma lista

 

Entenda que uma estrutura de dados é um container. É uma lista de coisas. Quaisquer coisas.

 

A lista é de nós. E cada nó aponta para ou contém uma coisa. No seu caso parece ser algo como um item de estoque com código, quantidade e nome.

 

typedef struct
{
  int cod;
  int quant;
  string nome;
} Lista;

 

Isso que postou não é uma Lista, não é um nó. É apenas um item. Não faz sentido. Tem um livro de estruturas de dados? Seu curso adota um livro? 

 

  Lista oo, *ptr;

 

Que significa? Declarou um ponteiro que não aponta para nada. 

E usa ponteiros no seu programa que não tem nenhum tipo de alocação? 

 

    switch (op) {
      case 1:
        insere(ptr);
        break;
      case 2:
        remove(ptr);
        break;
      case 3:
        quantidade(ptr);
        break;
      case 4:
        lowquant(ptr);
        break;
      case 5:
        todos(ptr);
        break;
      default:
        cout << "não vai sair não trouxa" << endl;
        break;
    };

 

Nunca escreva um programa interativo. Só vai perder MUITO tempo.

 

Note que esse switch aí tem todas essas funções acessando um ponteiro da suposta lista. 

 

Pois é: essa é a diferença maior entre C e C++. Essas funções devem estar DENTRO da struct. Essa é a vantagem (enorme) de representar coisas em C++

 

Você tem um livro sobre C++? 

 

Seu curso é sobre a linguagem ou estruturas de dados?

 

Seu programa está sim errado. Está longe de funcionar e escrito na linguagem errada. 😞 

 

 

Devair, o que eu tentei fazer foi:

 

1: criar uma estrutura;

2: alocar essa estrutura em um espaço de memória;

3:inserir dados para essa estrutura no espaço de memória;

4: alocar novamente essa estrutura "Lista" no proximo espaço de memória.

 

 

talvez não seja a melhor forma de fazer isso, estou apenas aprendendo. Mas de fato o programa não está rodando. Assim que eu sair do trabalho eu vou tentar consertar e fazer rodar.

 

sobre os espaços no codigo, eu dei ctrl+c ctr+v no Vscode para o forum, ele fica assim mesmo.

 

 

Sobre o fato de tentar deixa-lo interativo, eu gosto de me colocar em situações complicadas. Me faz pensar e entender algumas coisas.

 

Com esse codigo aprendi muitas coisas, principalmente ao tentar deixar ele interativo ("que não funcionou kkkkk").

 

Agradeço o retorno principalmente por me ajudar a evoluir com meu aprendizado. Bom dia!

 

  • Curtir 1
Postado

Isso foi o que usou para definir a tal Lista:

 

typedef struct
{
  int cod;
  int quant;
  string nome;
} Lista;

 

Só que não é uma lista. É um item apenas. E typedef em C++ não faz muito sentido.

 

11 horas atrás, Breno Busnello disse:

1: criar uma estrutura;

2: alocar essa estrutura em um espaço de memória;

 

Se sua estrutura é a tal Lista o simples é:

 

	Lista* cria();

 

Uma função que você chama e retorna o endereço de uma lista. Em C++ não se usa assim, basta declarar algo como lista e o construtor é chamado, e lá se coloca o código que cria a Lista e retorna o endereço.

 

12 horas atrás, Breno Busnello disse:

3:inserir dados para essa estrutura no espaço de memória;

 

Então se sua lista é de produtos e você quer inserir nela algo o simples é:

 

	int    insere(Item* item, Lista* lista);

 

Que recebe um ponteiro para um item e insere em uma lista. E retorna um código, como 0 se deu certo ou um outro valor indicando erro.

 

12 horas atrás, Breno Busnello disse:

4: alocar novamente essa estrutura "Lista" no proximo espaço de memória.

 

Provavelmente não é o que quer dizer. Acho que se refere a inserir um outro item na lista. E se for criar outra lista basta chamar criar() de novo.

 

Algo assim funcionaria:

 

#include "Lista.h"
using namespace std;

int main(void)
{
    Lista* pLista = cria();
    Item  um{12, 42, "exemplo"};
    insere(&um, pLista);
    insere(&um, pLista);
    insere(&um, pLista);

    Lista* outra = cria();

    pLista = remove(pLista);
    outra = remove(outra);
    std::cout << "OK!\n";
}

 

Para essa Lista
 

#include <iostream>
#include <string>
using namespace std;

struct Item
{
    int    cod;
    int    quant;
    string nome;
};

struct Node
{
    Item* item;
    Node* ant;
    Node* prox;
};

struct Lista
{
    unsigned size;  // tamanho
    Node*    ini;   // inicio
    Node*    fim;   // fim da lista
};

Lista* cria();
Lista* remove(Lista*);
int    insere(Item* um, Lista* lista);

 

Isso é praticamente C e não se escreve assim em C++. Mas é possível e roda.

 

12 horas atrás, Breno Busnello disse:

sobre os espaços no codigo, eu dei ctrl+c ctr+v no Vscode para o forum, ele fica assim mesmo.

 

Deve ter alguma maneira de evitar isso. Muita gente usa VSCODE e nem sempre os programas aparecem assim no forum.

 

12 horas atrás, Breno Busnello disse:

Sobre o fato de tentar deixa-lo interativo, eu gosto de me colocar em situações complicadas. Me faz pensar e entender algumas coisas.

 

Bem, eis o que eu disse antes:

 

Em 06/09/2022 às 22:37, arfneto disse:

Nunca escreva um programa interativo. Só vai perder MUITO tempo.

 

Não é uma situação complicada. E não vai te ensinar nada. Só vai perder tempo. 

 

Não há nada de especial em escrever um programa interativo. E não há nada de instrutivo ou sábio. 

 

Se você escrever uma função insere() como a que fez e for testar com 10 itens vai precisar digitar 30 campos. Muito bom. De que serve isso? E se fossem 1000? E se não tiver ninguém pra ficar digitando?

 

8 horas atrás, devair1010 disse:

não entendo como funcionam e nem sei programar as listas encadeadas

 

@devair1010 listas encadeadas são só isso: listas de coisas, e encadeadas por ponteiros de modo que um nó aponta para outro. Essas coisas são chamadas nós e cada nó tem ou aponta para um dado. Veja uma declaração no exemplo acima.

 

A vantagem disso é que é trivial de percorrer e remover e inserir no meio disso não mexe na lista toda: só em nós vizinhos.

 

 

@Breno Busnelloposte o código como está agora

 

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!