-
Posts
34 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por vagabond1
-
-
-
-
@arfneto Entendi, um colega me ajudou e deu certo
- 1
-
@arfneto Esta ok, ja consegui resolver o problema
Obrigado!
- 1
-
@arfneto Entendi amigo, minha dificuldade esta sendo essa de mudar entende?
int main(){ struct Pilha minhapilha; int capacidade, op; float valor; printf( "\nCapacidade da pilha? " ); scanf( "%d", &capacidade ); criarpilha (&minhapilha, capacidade); while( 1 ){ /* loop infinito */ printf("\n1- empilhar (push)\n"); printf("2- desempilhar (POP)\n"); printf("3- Mostrar o topo \n"); printf("4- sair\n"); printf("\nopcao? "); scanf("%d", &op); switch (op){ case 1: //push if( estacheia( &minhapilha ) == 1 ) printf("\nPILHA CHEIA! \n"); else { printf("\nVALOR? "); scanf("%f", &valor); empilhar (&minhapilha, valor); } break; case 2: //pop if ( estavazia(&minhapilha) == 1 ) printf( "\nPILHA VAZIA! \n" ); else{ valor = desempilhar (&minhapilha); printf ( "\n%.1f DESEMPILHADO!\n", valor ); } break; case 3: // mostrar o topo if ( estavazia (&minhapilha) == 1 ) printf( "\nPILHA VAZIA!\n" ); else { valor = retornatopo (&minhapilha); printf ( "\nTOPO: %.1f\n", valor ); } break; case 4: exit(0); default: printf( "\nOPCAO INVALIDA! \n" ); } } }
E no "case 3" onde define o topo e se a pilha esta vazia que não consigo definer pelo:
void pilha_vazia(Pilha* pi) { if(pi == NULL || *pi == NULL) printf("\n Pilha está vazia!"); else printf("\n Pilha não está vazia!"); } int push(Pilha* pilha, struct prato p) { if(pilha == NULL) return 0; struct elemento* aux = (struct elemento*)malloc(sizeof(struct elemento)); if(aux == NULL) return 0; aux->item = p; aux->prox = (*pilha); //TOPO DA PILHA *pilha = aux; //Novo elemento passa a ser o primeiro da pilha return 1; }
-
@arfneto Tem sim,
Esse enunciado que falei, tem que ser feito baseado no exemplo dado em aula
O professor não aceita de outra forma as funções do struct e pilha
A unica coisa que pediu para criarmos com liberdade é função do void main/int main para exeibir e imprimir o topo da pilha
Por isso que o segundo codigo não conta para a resolução do problema, estou me baseando nesse outro codigo
-
@arfneto apos tentar bastante consegui dessa forma:
#include <stdio.h> #include <string.h> #include <stdlib.h> struct prato { char cor[50]; }; struct elemento { struct prato item; struct elemento *prox; }; typedef struct elemento* Pilha; Pilha* cria_pilha() { Pilha* pi = (Pilha*)malloc(sizeof(Pilha)); if(pi != NULL) *pi = NULL; return pi; } int recupera_tamanho_pilha(Pilha* pi) { if(pi == NULL) return 0; int tamanho = 0; struct elemento* item = *pi; while(item != NULL) { tamanho++; item = item->prox; } return tamanho; } void pilha_vazia(Pilha* pi) { if(pi == NULL || *pi == NULL) printf("\n Pilha está vazia!"); else printf("\n Pilha não está vazia!"); } int push(Pilha* pilha, struct prato p) { if(pilha == NULL) return 0; struct elemento* aux = (struct elemento*)malloc(sizeof(struct elemento)); if(aux == NULL) return 0; aux->item = p; aux->prox = (*pilha); //TOPO DA PILHA *pilha = aux; //Novo elemento passa a ser o primeiro da pilha return 1; } imprime(Pilha* pi){ struct elemento* item = *pi; printf("\n O ultimo item e %s", item->item); } void main() { Pilha *pilha; pilha = cria_pilha(); printf("\n Tamanho da pilha: %d", recupera_tamanho_pilha(pilha)); pilha_vazia(pilha); struct prato p; strcpy(p.cor, "Azul"); push(pilha, p); strcpy(p.cor, "Verde"); push(pilha, p); strcpy(p.cor, "rosa "); push(pilha, p); printf("\n Tamanho da pilha: %d", recupera_tamanho_pilha(pilha)); imprime(pilha) ; }
O outro codigo consegui fazer executar:
#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct Pilha { int topo; int capa; float *pElem; }; void criarpilha( struct Pilha *p, int c ){ p->topo = -1; p->capa = c; p->pElem = (float*) malloc (c * sizeof(float)); } int estavazia(struct Pilha* p) { return (p->topo < 0); } int estacheia ( struct Pilha *p ){ if (p->topo == p->capa - 1) return 1; else return 0; } void empilhar ( struct Pilha *p, float v){ p->topo++; p->pElem [p->topo] = v; } float desempilhar ( struct Pilha *p ){ float aux = p->pElem [p->topo]; p->topo--; return aux; } float retornatopo ( struct Pilha *p ){ return p->pElem [p->topo]; } int main(){ struct Pilha minhapilha; int capacidade, op; float valor; printf( "\nCapacidade da pilha? " ); scanf( "%d", &capacidade ); criarpilha (&minhapilha, capacidade); while( 1 ){ /* loop infinito */ printf("\n1- empilhar (push)\n"); printf("2- desempilhar (POP)\n"); printf("3- Mostrar o topo \n"); printf("4- sair\n"); printf("\nopcao? "); scanf("%d", &op); switch (op){ case 1: //push if( estacheia( &minhapilha ) == 1 ) printf("\nPILHA CHEIA! \n"); else { printf("\nVALOR? "); scanf("%f", &valor); empilhar (&minhapilha, valor); } break; case 2: //pop if ( estavazia(&minhapilha) == 1 ) printf( "\nPILHA VAZIA! \n" ); else{ valor = desempilhar (&minhapilha); printf ( "\n%.1f DESEMPILHADO!\n", valor ); } break; case 3: // mostrar o topo if ( estavazia (&minhapilha) == 1 ) printf( "\nPILHA VAZIA!\n" ); else { valor = retornatopo (&minhapilha); printf ( "\nTOPO: %.1f\n", valor ); } break; case 4: exit(0); default: printf( "\nOPCAO INVALIDA! \n" ); } } }
Mas tentei implementar as funções do segundo codigo no primeiro e sem resultado, então decidi fazer de outra forma
-
@devair1010 Amigo, poderia me ajudar lá no meu post tambem, por favor?
Estou tentando e nada, no meu post de PILHA
Obrigado!
- 1
-
Em 05/06/2020 às 21:34, arfneto disse:
if (pi == NULL || *pi == NULL)
A segunda condição não faz sentido. (*pi) é uma struct.
Você tem uma função push() perdida no código.
E faltam uns struct em declarações de pilha.
Ao invés de declarar
struct Pilha { int topo; int capa; float* pElem; };
Se acostume a declarar
typedef struct // (a) { int topo; int capa; float* pElem; } Pilha; // ou mesmo struct _pilha // (b) { int topo; int capa; float* pElem; }; typedef struct _pilha Pilha;
Assim não precisa ficar repetindo struct em todo lugar. E se não precisa repetir não vai esquecer
typedef cria um alias, um sinônimo.
O exemplo (b) é mais seguro porque pode ainda usar referências a _pilha dentro da struct porque o nome já é conhecido, Se não precisa, o caso (a) é mais legível.
Em pilhas os métodos push() pop() e top() são consagrados. Podia manter
Realmene acrescentar a nova declaração resolveu um problema e alterar o (*pi) tambem, mas não estou entendo estes erros, li todos eles mas mesmo alterando não resolve os problemas.
Outra coisa seria no int main, creio que não faz sentido declarar dentro da case o pilha_vazio sendo que esta sendo declarado na struct, certo?
- 2
-
Alguem ai para ajudar no codigo acima?
Preciso elaborar uma função que exiba o topo da pilha e a função deverá imprimir o elemento do topo, mas esta dando erro no codigo
#include <stdio.h> #include <string.h> #include <stdlib.h> struct Pilha { int topo; int capa; float *pElem; }; void criarpilha( struct Pilha *p, int c ){ p->topo = -1; p->capa = c; p->pElem = (float*) malloc (c * sizeof(float)); } void pilha_vazia(Pilha* pi) { if(pi == NULL || *pi == NULL) printf("\n Pilha está vazia!"); else printf("\n Pilha não está vazia!"); } int push(Pilha* pilha, struct prato p) { if(pilha == NULL) return 0; struct elemento* aux = (struct elemento*)malloc(sizeof(struct elemento)); if(aux == NULL) return 0; aux->item = p; aux->prox = (*pilha); *pilha = aux; return 1; } int estacheia ( struct Pilha *p ){ if (p->topo == p->capa - 1) return 1; else return 0; } void empilhar ( struct Pilha *p, float v){ p->topo++; p->pElem [p->topo] = v; } float desempilhar ( struct Pilha *p ){ float aux = p->pElem [p->topo]; p->topo--; return aux; } float retornatopo ( struct Pilha *p ){ return p->pElem [p->topo]; } int main(){ struct Pilha minhapilha; int capacidade, op; float valor; printf( "\nCapacidade da pilha? " ); scanf( "%d", &capacidade ); criarpilha (&minhapilha, capacidade); while( 1 ){ /* loop infinito */ printf("\n1- empilhar (push)\n"); printf("2- desempilhar (POP)\n"); printf("3- Mostrar o topo \n"); printf("4- sair\n"); printf("\nopcao? "); scanf("%d", &op); switch (op){ case 1: //push if( estacheia( &minhapilha ) == 1 ) printf("\nPILHA CHEIA! \n"); else { printf("\nVALOR? "); scanf("%f", &valor); empilhar (&minhapilha, valor); } break; case 2: //pop if ( estavazia(&minhapilha) == 1 ) printf( "\nPILHA VAZIA! \n" ); else{ valor = desempilhar (&minhapilha); printf ( "\n%.1f DESEMPILHADO!\n", valor ); } break; case 3: // mostrar o topo if ( estavazia (&minhapilha) == 1 ) printf( "\nPILHA VAZIA!\n" ); else { valor = retornatopo (&minhapilha); printf ( "\nTOPO: %.1f\n", valor ); } break; case 4: exit(0); default: printf( "\nOPCAO INVALIDA! \n" ); } } }
- 1
- 1
-
#include <stdio.h> #include <string.h> #include <stdlib.h> struct Pilha { int topo; int capa; float *pElem; }; void criarpilha( struct Pilha *p, int c ){ p->topo = -1; p->capa = c; p->pElem = (float*) malloc (c * sizeof(float)); } void pilha_vazia(Pilha* pi) { if(pi == NULL || *pi == NULL) printf("\n Pilha está vazia!"); else printf("\n Pilha não está vazia!"); } int push(Pilha* pilha, struct prato p) { if(pilha == NULL) return 0; struct elemento* aux = (struct elemento*)malloc(sizeof(struct elemento)); if(aux == NULL) return 0; aux->item = p; aux->prox = (*pilha); *pilha = aux; return 1; } int estacheia ( struct Pilha *p ){ if (p->topo == p->capa - 1) return 1; else return 0; } void empilhar ( struct Pilha *p, float v){ p->topo++; p->pElem [p->topo] = v; } float desempilhar ( struct Pilha *p ){ float aux = p->pElem [p->topo]; p->topo--; return aux; } float retornatopo ( struct Pilha *p ){ return p->pElem [p->topo]; } int main(){ struct Pilha minhapilha; int capacidade, op; float valor; printf( "\nCapacidade da pilha? " ); scanf( "%d", &capacidade ); criarpilha (&minhapilha, capacidade); while( 1 ){ /* loop infinito */ printf("\n1- empilhar (push)\n"); printf("2- desempilhar (POP)\n"); printf("3- Mostrar o topo \n"); printf("4- sair\n"); printf("\nopcao? "); scanf("%d", &op); switch (op){ case 1: //push if( estacheia( &minhapilha ) == 1 ) printf("\nPILHA CHEIA! \n"); else { printf("\nVALOR? "); scanf("%f", &valor); empilhar (&minhapilha, valor); } break; case 2: //pop if ( estavazia(&minhapilha) == 1 ) printf( "\nPILHA VAZIA! \n" ); else{ valor = desempilhar (&minhapilha); printf ( "\n%.1f DESEMPILHADO!\n", valor ); } break; case 3: // mostrar o topo if ( estavazia (&minhapilha) == 1 ) printf( "\nPILHA VAZIA!\n" ); else { valor = retornatopo (&minhapilha); printf ( "\nTOPO: %.1f\n", valor ); } break; case 4: exit(0); default: printf( "\nOPCAO INVALIDA! \n" ); } } }
Alguem ai para ajudar no codigo acima?
Preciso elaborar uma função que exiba o topo da pilha e a função deverá imprimir o elemento do topo, mas esta dando erro no codigo
valeu
-
30 minutos atrás, Tio Chang disse:adicionado 3 minutos depois
A primeira etapa eu ja fiz que é essa, o exercicio ja afirma isso, entao teoricamente nem precisa fazer.
Agora o que o exercicio quer de voce é isso
Resumindo, tem haver com o switch que sera colocado em cada filial, se tu vai usar Vlan, quais os paramentros da rede para limitar em 254 pcs e para liberar acima de 254 pcs no wifi
Se eu fizer tudo acabou se o exercicio.
adicionado 28 minutos depoisObrigado amigo, vou tentar fazer agora.
-
@Tio Chang É aqui que me perco, tentei fazer essa representação mas não consigo sair dessa estaca. Teria alguma forma de ilustrar para facilitar?
-
Alguem poderia me dar uma luz com isso?
Veja o enunciado:
Prezados Senhores, boa noite!
Para resolução da segunda atividade, favor utilizar a descrição abaixo:
Você foi contratado para planejar a criação de uma rede para uma corporação com as seguintes características:
• A corporação possui uma Unidade Matriz que se interliga com outras 3 Unidades Filiais através de links de fibra ótica de 1 Gbps.
• Cada Filial deverá ter sua respectiva rede segmentada em três áreas: VENDAS, FINANCEIRO e WIFI .
• As redes VENDAS e FINANCEIRO não deverão permitir mais do que 254 dispositivos conectados .
• A rede WIFI deve permitir acima de 254 dispositivos conectados.
• Todas as Unidades (Matriz e Filiais) se comunicam com a internet por um link de fibra ótica de 100 Mbps.
Você deve planejar as redes de forma que não existam conflitos de ips dentro da rede.
Todas as Unidades devem se comunicar apenas com a Matriz, sem a necessidade de uma filial se comunicar com outra filial.
Bom, nunca utilizei o cisco antes pois tudo que "aprendi" foi teorico em redes e não pratico, mas não estou entendo quase nada de funcionalidades do cisco
Isso dificulta muito. O que consegui fazer ate agora foi na imagem que postei, quem puder me ajudar ficaria grato.
Obrigado!
-
Em 14/04/2020 às 22:45, arfneto disse:
Em tempos de confinamento o tempo gasto nessas coisas aumentou e esse problema é interessante.
Eis os arquivos. É lógico que eu não fiz nada exceto rodar aquele programa para 10 clientes 8 endereços 12 telefones e 9 tipos. De todo modo:
Clientes
0001Cliente0001 0002Cliente0002 0003Cliente0003 0004Cliente0004 0005Cliente0005 0006Cliente0006 0007Cliente0007 0008Cliente0008 0009Cliente0009 0010Cliente0010
Endereços
0001Rua Via0001 20001000 0002Rua Via0002 20002000 0003Rua Via0003 20003000 0004Rua Via0004 20004000 0005Rua Via0005 20005000 0006Rua Via0006 20006000 0007Rua Via0007 20007000 0008Rua Via0008 20008000
Telefones
0001+55 (11) 930010001 0002+55 (11) 930020002 0003+55 (11) 930030003 0004+55 (11) 930040004 0005+55 (11) 930050005 0006+55 (11) 930060006 0007+55 (11) 930070007 0008+55 (11) 930080008 0009+55 (11) 930090009 0010+55 (11) 930100010 0011+55 (11) 930110011 0012+55 (11) 930120012
Tipos
00010001 00020002 00030003 00040004 00050005 00060006 00070007 00080008 00090009
Relacionamentos
0001:0001:0001 0002:0002:0000 0002:0000:0002 0003:0003:0003 0004:0004:0004 0004:0000:0005 0005:0005:0006 0005:0000:0007 0006:0006:0000 0007:0007:0000 0008:0008:0008 0008:0000:0009 0009:0002:0010 0010:0004:0011 0010:0000:0012
Esse eu digitei a olho no terminal mesmo. Isso é uma simples tabela. X:Y:Z que relaciona os caras. X é o cliente. Y é a Id do endereço, Z é id do telefone na tabela. Quando for zero não importa.
Você já sabe como ler os arquivos. Ler as relações seria igual. O arquivo está claro classificado por cliente por que você pode escolher isso. Então ao ler as relações tem tudo o que falta, exceto os tipos de telefone.
E conforme o usuário digitar mais dados eles vão para as listas de Clientes, Enderecos e tal. Tudo com tamanho fixo, afinal esse não é o cadastro do INSS. Algo simples tipo
Cliente cliente[100]; Endereco endereco[100]; Telefone telefone[200]; TipoTelefone tipo_telefone[9]; Numero total_cli = 0; Numero total_end = 0; Numero total_tel = 0; Numero total_tip = 0;
No início você carrega com o que veio nos arquivos, para poder testar tudo sem digitar nada.
Conforme entrarem dados pelo menu você coloca nas tabelas e atualiza as relações.
As relações podem ficar com o mesmo formato para não criar mais nada.
Na saída grava tudo de volta no disco e a vida segue.
Meu palpite.
Com base nos estudos que você me passou, consegui montar o seguinte codigo:
Estou com problemas para imprimir o Logradouro pois aparece um monte de numero aleatorio, mesmo eu inserido uma sequencia de numero. E fiz via teclado pois preciso testar assim.
#include <stdlib.h> #include <stdio.h> #include <string.h> int main () { struct cliente { int idCliente; char nome[50]; }; struct cliente *x = (struct cliente *) malloc(10 * sizeof(struct cliente)); struct endereco { int endereco[100]; int idEndereco; int cep; }; struct endereco *y = (struct endereco *) malloc(10 * sizeof(struct endereco)); struct telefone { int telefone; int idTelefone; char tipo[100]; }; struct telefone *z = (struct telefone *) malloc(10 * sizeof(struct telefone)); int cadastro; printf("\n -----Quantos clientes deseja cadastrar?-----\n "); scanf("%i", &cadastro); int count = 1; for( count = 1 ; count <= cadastro; count++){ printf("\n Digite o nome do Cliente: \n"); scanf("%s", &x[count].nome); printf("\n Digite o telefone: \n"); scanf("%d", &z[count].telefone); printf("\n Digite o Tipo de Telefone (Celular/Fixo): \n"); scanf("%s", &z[count].tipo); printf("\n Digite o Logradouro: \n"); scanf("%s", &y[count].endereco); printf("\n Digite o CEP: \n"); scanf("%i", &y[count].cep); } x[cadastro].idCliente = cadastro; y[cadastro].idEndereco = cadastro; z[cadastro].idTelefone = cadastro; FILE *arquivo; arquivo = fopen("arquivocliente.txt", "w"); struct cliente; if (arquivo==NULL){ printf("Erro ao criar arquivo.\n"); }else{ fprintf( arquivo, "###Nome### \n" ); fprintf( arquivo, "Id: %i \n", x[cadastro].idCliente); fprintf( arquivo, "Nome: %s \n\n", x[cadastro].nome); fprintf( arquivo, "###Telefone### \n" ); fprintf( arquivo, "Id: %i \n", z[cadastro].idTelefone); fprintf( arquivo, "Telefone: %d \n", z[cadastro].telefone); fprintf( arquivo, "Tipo: %s \n\n", z[cadastro].tipo); fprintf( arquivo, "##Endereço## \n" ); fprintf( arquivo, "Id: %i \n", y[cadastro].idEndereco); fprintf( arquivo, "Logradouro: %s \n", y[cadastro].endereco); fprintf( arquivo, "CEP: %i \n\n", y[cadastro].cep); fclose(arquivo); return 0; printf("\tArquivo gravado com sucesso.\n"); fclose(arquivo); } getch(); return 0; }
-
@arfneto Perfeito, se não for incomodar, muito obrigado!
-
@arfneto Com certeza, muito obrigado pela ajuda, vou implementar o programa.
-
@arfneto Amigo sendo bem sincero, não gosto de programação mas tenho que fazer isso para me formar. Não quero seguir carreira como programador, no MOMENTO desejo aprender somente o essencial, futuramente caso eu crie interesse vou fazer cursos ou algo do tipo pois faculdade o ensino de programação é um completo LIXO. Mas muito obrigado pela ajuda.
- 1
-
@arfneto Como ainda estou em faze de aprendizagem vou tentar implementar com laços mais simples como printf/scanf pois de qualqer forma preciso escrever via teclado, mas seus exemplos ficaram otimos para prendizagem.
-
@arfneto Perfeito, muito obrigado!
Agora vou trabalhar e estudar um pouco mais esses conceitos e tentar alterar um pouco do codigo para entendimento pessoal.
-
@arfneto Nossa ficou otimo a explicação, obrigado!
Não sei por que esse for esta dando erro, tentei de tudo para tentar resolver.
*somente implementei as relações e não alterei seu codigo para testar o mesmo, mas assim que estiver rodando vou realizar as alterações para facilitar ainda mais o entendimento.
Mas muito obrigado, já ajudou bastante.
-
@arfneto Exato, neste programa é o que mais se aproxima do que preciso, este foi o que eu mesmo criei com algumas bases. Pois esta pedindo para escrever com o Teclado as informações do cliente, só que esse programa executa e gera o arquivo TXT porém fica tudo meio que uma bagunça.
#include <stdio.h> #include <stdlib.h> #define T 2 struct cliente { char nome [100]; int telefone; int id; char tipo [50]; int endereco; int cep; }; struct cliente ler (){ struct cliente a; printf("\n#Cliente\n"); printf("\n----Id:---- \n"); scanf("%d",&a.id); printf("----Digite seu nome:---- \n"); fflush(stdin); gets(a.nome); printf("\n#Telefone\n"); printf("\n----Id:---- \n"); scanf("%d",&a.id); printf("\n----Telefone:---- \n"); scanf("%d",&a.telefone); printf("\n----Tipo:---- \n"); fflush(stdin); gets(a.tipo); printf("\n#Endereco\n"); printf("\n----Id:---- \n"); scanf("%d",&a.id); printf("\n----Endereco:---- \n"); scanf("%d",&a.endereco); printf("\n----CEP:---- \n"); scanf("%d",&a.cep); printf("\n============================\n"); return a; } void imprime (struct cliente a[T]){ int x; for (x=0; x<T; x++) { printf("\t Id: %d\n",a[x].id); printf("\t Nome: %s\n",a[x].nome); printf("\t Telefone: %d\n",a[x].telefone); printf("\t Tipo: %s\n",a[x].tipo); printf("\t Endereco: %d\n",a[x].endereco); printf("\t CEP: %d\n",a[x].cep); } } int main () { int x; char caminho[]="cliente.txt",caractere; FILE *arquivo;arquivo = fopen (caminho,"w"); struct cliente a[T]; if (arquivo==NULL){ printf("Erro ao criar arquivo.\n"); }else{ for(x=0; x<T; x++) { a[x]= ler(); fprintf(arquivo,"Id: %d\nNome: %s\nTelefone: %d\nTipo %s\nEndereco: %d\nCEP: %d\n ", a[x].id,a[x].nome,a[x].telefone,a[x].tipo,a[x].endereco,a[x].cep); printf("\tArquivo gravado com sucesso.\n"); } fclose(arquivo); } imprime(a); system("pause"); return 0; }
adicionado 1 minuto depois@arfneto E por gentileza, teria o link desse programa que citou aqui no forum?
Obrigado!
-
@arfneto Entendi um pouco, mas tipo, nas questões das relações que mora a dificuldade para implementar o que é pedido. Geralmente busco essas dificuldades em codigos base para poder assim realizar uma logica e fazer a arquitetura do programa. Mas colocar Struct com geração de arquivo TXT esta muito complicado para o que eu aprendi ainda. To meio que sem um rumo pra ir.
-
@arfneto Obrigado novamente, entendi um pouco sobre os arquivos. Minha maior dificuldade é estruturar de forma correta e implementar as nomeclaturas no codigo, não sou muito da area de programação e estou aprendendo aos poucos. Gostei do exemplo que me passou mas como disse que a maior dificuldade é implementar, creio que da para usar sua base sem problemas.
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
Cisco Packet Tracer atividade de redes
em Redes e Internet
Postado
@Tio Chang Já tinha conseguido fazer antes, obrigado!