Ir ao conteúdo
  • Cadastre-se

Jederson Yago

Membro Júnior
  • Posts

    14
  • Cadastrado em

  • Última visita

Reputação

7
  1. @isrnick pode colocar um exemplo de como seria?
  2. @MB_ pior que só consigo fazer assim, só aprendi assim mas vou ver se consigo fazer do outro modo.
  3. Opa galera de boas? então estou fazendo um algoritmo onde preciso listar de um arquivo só que sendo ordenado, listar eu consigo de boa mas ordenado não sei, alguem pode me ajudar? o codigo vai ai. são as funções de inserir e listar normal mesmo, alguem ajuda //Função para inserir os dados void InserirContato(){ FILE* arq; CONTATO ctt; arq = fopen("agenda.txt","a"); if(arq == NULL){ printf("Erro na abertura do arquivo!\n"); exit(1); } else { fflush(stdin); printf("Digite o nome: "); gets(ctt.nome); fflush(stdin); printf("Digite o telefone: "); gets(ctt.fone); fflush(stdin); printf("Digite sua cor: "); gets(ctt.cor); printf("Digite seu aniversario: "); scanf("%d %d %d", &ctt.aniv.dia, &ctt.aniv.mes, &ctt.aniv.ano); fwrite(&ctt, sizeof(CONTATO),1,arq); } fclose(arq); } //Função que lista todos os contatos cadastrados void ListarContato(){ FILE* arq; CONTATO ctt; arq = fopen("agenda.txt","r"); if(arq == NULL){ printf("Erro na abertura do arquivo!\n"); exit(1); } else { while(fread(&ctt,sizeof(CONTATO),1,arq) == 1){ printf("-----------------------------------------------\n"); printf("\nNome: %s\n", ctt.nome); printf("Telefone: %s\n", ctt.fone); printf("Cor: %s\n", ctt.cor); printf("Aniversario: %d/%d/%d\n", ctt.aniv.dia, ctt.aniv.mes, ctt.aniv.ano); printf("-----------------------------------------------\n"); } } fclose(arq); getchar(); }
  4. @devair1010 ah sim, obrigado vou mudar aqui
  5. Boa tarde, pessoal fiz uma função para inserir dados em um arquivo txt, só que na hora que vou ver o bloco de notas aparece com uma letras estranhas, alguem pode me ajudar? tem como ficar do jeito que digitei? fica assim no arquivo ( Jederson @ €/ 2‚µþ` *‚96359021 tªî·ûþÿÿÿ ) eu digito o nome, contato e aniversario mas fica com esses negocios estranhos. a função é essa aqui //Função para inserir os dados void InserirContato(){ FILE* arq; CONTATO ctt; arq = fopen("agenda.txt","a"); if(arq == NULL){ printf("Erro na abertura do arquivo!\n"); exit(1); } else { fflush(stdin); printf("Digite o nome: "); gets(ctt.nome); fflush(stdin); printf("Digite o telefone: "); gets(ctt.fone); printf("Digite seu aniversario: "); scanf("%d %d %d", &ctt.aniv.dia, &ctt.aniv.mes, &ctt.aniv.ano); fwrite(&ctt, sizeof(CONTATO),1,arq); } fclose(arq); }
  6. @devair1010 Não entendi muito bem, pode dar um exemplo? de algum codigo qualquer pf?
  7. \\CADASTRO.H #define FILMES_H_INCLUDED #ifndef FILMES_H_INCLUDED void menu(); void CadastrarAluno(); void ListarAlunos(); void RemoverAluno(); void PesquisarAluno(); #endif \\CADASTRO.C #include <stdio.h> #include <stdlib.h> #include <string.h> #include "FILMES.h" #define MAX_ALUNOS 50 typedef struct aluno{ char nome[50]; float notas[4]; int ativo; }Aluno; FILE* arq; Aluno alunos[MAX_ALUNOS]; //Função menu para o gerenciamento void menu(){ int op; do{ system("cls"); system("color 4F"); puts("|-----------------------------------------------|"); puts("| Programador: JEDERSON YAGO / FRANCISCO RUAN |"); puts("|-----------------------------------------------|"); puts("| PROGRAMA DE CONTROLE DE LOCADORA |"); puts("|----------------------MENU---------------------|"); puts("| |"); puts("| 1. Cadastrar Aluno |"); puts("| 2. Remover Aluno |"); puts("| 3. Alunos Reprovados |"); puts("| 4. Pesquisar Alunos |"); puts("| 5. Listar Alunos |"); puts("| 0. Sair |"); puts("| |"); puts("|-----------------------------------------------|\n"); scanf("%d", &op); getchar(); switch(op) { case 1: CadastrarAluno(); break; case 2: RemoverAluno(); break; case 4: PerquisarAluno(); case 5: ListarAlunos(); break; default: break; } getchar(); }while(op!=0); } //Função para o cadastro de alunos e nota void CadastrarAluno(){ char nome[50]; float notas[4]; int op; int i; do{ system("cls"); printf("\nNome: "); fgets(nome,sizeof(nome),stdin); printf("\n1 - Bimestre: "); scanf("%f", &notas[0]); printf("\n2 - Bimestre: "); scanf("%f", &notas[1]); printf("\n3 - Bimestre: "); scanf("%f", &notas[2]); printf("\n4 - Bimestre: "); scanf("%f", &notas[3]); for(i = 0; i < MAX_ALUNOS; ++i){ if(alunos[i].ativo == 0){ alunos[i].notas[0] = notas[0]; alunos[i].notas[1] = notas[1]; alunos[i].notas[2] = notas[2]; alunos[i].notas[3] = notas[3]; strcpy(alunos[i].nome, nome); alunos[i].ativo = 1; break; } } printf("\n1 - Continuar\n0 - Sair\n"); scanf("%d", &op); }while(op!=0); } void ListarAlunos(){ int i; system("cls"); printf("\n LISTA DE ALUNOS\n"); for(i = 0; i < MAX_ALUNOS; ++i){ if(alunos[i].ativo == 1){ printf("Matricula: %d", i+1); printf("\nNome:%s", alunos[i].nome); printf("\n1 - Bimestre: %0.2f", alunos[i].notas[0]); printf("\n2 - Bimestre: %0.2f", alunos[i].notas[1]); printf("\n3 - Bimestre: %0.2f", alunos[i].notas[2]); printf("\n4 - Bimestre: %0.2f", alunos[i].notas[3]); printf("\n---------\n"); } } } void RemoverAluno(){ int matricula; ListarAlunos(); printf("\nDigite a matricula do aluno a ser removido: "); scanf("%d", &matricula); --matricula; alunos[matricula].ativo = 0; printf("\nAluno removido com sucesso"); getchar(); } void PerquisarAluno(){ int i; char nome[50]; int op; do{ system("cls"); printf("Digite o nome do aluno para pesquisar: "); fgets(nome,sizeof(nome),stdin); for(i = 0; i < MAX_ALUNOS; ++i){ if(strstr(alunos[i].nome,nome)!=NULL){ printf("Matricula: %d", i+1); printf("\nNome:%s", alunos[i].nome); printf("\n1 - Bimestre: %0.2f", alunos[i].notas[0]); printf("\n2 - Bimestre: %0.2f", alunos[i].notas[1]); printf("\n3 - Bimestre: %0.2f", alunos[i].notas[2]); printf("\n4 - Bimestre: %0.2f", alunos[i].notas[3]); printf("\n---------\n"); } } printf("Digite 0 para sair ou 1 para nova perquisa: "); scanf("%d", &op); getchar(); }while(op!=0); } \\MAIN.C #include <stdio.h> #include <stdlib.h> #include <string.h> #include "FILMES.h" int main(){ menu(); return 0; } Boa Tarde, estou com um problema e queria saber se podiam me ajudar, fiz esse codigo de cadastro simpre de alunos e notas e queria coloca-lo para ser inseridos em arquivos, poderiam me ajudar e explicar como farei isso?
  8. @isrnick alocar os dados quem vão ser registrados, tem como? alguem pode me ajudar?
  9. Alguem poderia me ajudar em alocar dinamicamente esse codigo? tentei e não consegui, eu tenho que alocar dentro das funções ou no main? deixei o codigo anexado, me ajuda pf desculpe se ficou mutito grande, o anexo ta ai para maior facilidade. || filmes.c || #include <stdio.h> #include <stdlib.h> #include <string.h> #include "filmes.h" #define TAM 30 //PROGRAMADOR JEDERSON YAGO / FRANCISCO RUAN //DISCIPLINA: ALGORITMOS E ESTRUTURA DE DADOS I struct ficha{ int codigo; char filme[TAM]; float duracao; char categoria[TAM]; char status; int ativo; }; struct ficha dados; FILE *arq; char resp; /*Função para abrir o arquivo*/ void AbrirArquivo(char filme[]){ system("cls"); arq = fopen(filme, "rb+"); // associa ao arq fisico e, se arquivo nao existe, deve ser criado, rb = somente para leitura if (arq == NULL) puts("NULL"); if (arq == NULL) arq = fopen(filme, "wb+");// abre o arquivo depois - rb = escrita a partir do início do arquivo puts("ARQUIVO ABERTO."); } /*Função para fechar o arquivo*/ void FecharArquivo() { system("cls"); fclose(arq); puts("ARQUIVO FECHADO."); } //Registra o filme void RegistrarFilme(){ char opcao; do{ //Faz inclusão dos dados para registra o filme system("cls"); fseek(arq,0,SEEK_END); // procura de uma certa posição do arquivo - arq, 0 = qtd bytes para deslocamento do cursor //seek_end - começa do final para o início puts("** INCLUSAO DE FILME ***\n"); printf("Codigo ......:"); fflush(stdin); scanf("%d",&dados.codigo); printf("Filme ..:"); fflush(stdin); gets(dados.filme); printf("Duracao do filme..:"); fflush(stdin); scanf("%f",&dados.duracao); printf("Categoria..:"); fflush(stdin); gets(dados.categoria); printf("Status..:"); puts("D = Disponivel"); puts("L = Locado"); fflush(stdin); dados.status = toupper(getchar()); if((dados.filme == "") || (dados.filme == NULL))// tratamento para nome em branco { puts("ERRO DEVIDO A DADOS ERRADOS INSERIDOS"); puts("Deixou o campo FILME em branco"); puts("Os dados nao foram registrados no sistema"); } else if(dados.codigo == NULL)//tratamento para codigo em branco { puts("REGISTRO RESTRINGIDO DEVIDO A DADOS ERRADOS INSERIDOS"); puts("Deixou o campo FILME em branco"); puts("Os dados nao foram registrados no sistema"); } //Tratamento do status, restringe o usuário a colocar diferente de D ou L else if((dados.status == 'D') || (dados.status == 'L') /*&& (dados.filme != NULL) || (dados.codigo != NULL)*/) { dados.ativo = 1;// Ativo = 1 quer dizer que existe, por que na função de exclusão, usaremos exclusão lógica colocando ativo = 0 fwrite(&dados,sizeof(struct ficha),1,arq);// escreve todos os dados no arquivo } else { puts("REGISTRO RESTRINGIDO DEVIDO A DADOS ERRADOS INSERIDOS"); puts("Ou você inseriu Status digitado errado, Somente digite D = disponivel ou L = locado"); puts("Deixou alguns dos campos em branco"); puts("Os dados nao foram registrados no sistema"); } // se for errado o status, ele não registra os dados e dá a opcao de fazer uma nova inclusão if (ferror(arq)) puts("ERRO!!"); printf("\nDESEJA INCLUIR OUTRO FILME <S/N>? "); fflush(stdin); opcao = toupper(getchar()); } //fim primeiro Do while (opcao == 'S'); } //Busca filme pelo código e exibe seu status se está locado ou não int Buscar(int codigo) { int nreg = -1; rewind(arq); //posiciona na primeira estrutura do arquivo fread(&dados,sizeof(struct ficha),1,arq);//&dados aponta a estrutura a ser lida //sizeof()o tamanho do arquivo, 1 quantidade de buscas, arq = arquivo if (!ferror(arq))// se não retorna erro se der erro, entra no if while (!feof(arq))//feof informa se chegou ao fim do arquivo, se for diferente entra no while { nreg++; if ((dados.codigo) == codigo) // compara se o filme digitado tem na lista, se tem ele busca, ao invés de usar == tem que usar = return(nreg); fread(&dados,sizeof(struct ficha),1,arq); //fread, retorna um número inteiro correspondente a quantidade de bytes lidos } else puts("ERROR!!"); return(-1); } // Função para buscar filme por categoria int BuscarPalavra(char categoria[TAM]) { int nreg = -1; rewind(arq); //posiciona na primeira estrutura do arquivo fread(&dados,sizeof(struct ficha),1,arq);//&dados aponta a estrutura a ser lida //sizeof()o tamanho do arquivo, 1 quantidade de buscas, arq = arquivo if (!ferror(arq))// se não retorna erro se der erro, entra no if while (!feof(arq))//feof informa se chegou ao fim do arquivo, se for diferente entra no while { nreg++; if (strcmp(dados.categoria, categoria) == 0) // compara se o filme digitado tem na lista, se tem ele busca, ao invés de usar == tem que usar = return(nreg); fread(&dados,sizeof(struct ficha),1,arq); //executa a leitura do arquivo } else puts("ERROR!!"); return(-1); } //Função para fazer a locação do filme void Locar() { int codigo; int nreg; system("cls"); puts("** LOCAR FILME ***\n"); printf("Digite o codigo do filme para registrar a locacao ......:"); fflush(stdin); scanf("%d",&codigo); nreg = Buscar(codigo); if ( nreg >=0 ) // se a busca for maior do que 0 ele achou e apresentará os dados achados e mudará o status automaticamente { if(dados.status != 'L') { printf("Status ..: %c\n",dados.status); fflush(stdin); dados.status = 'L'; printf("Novo Status..= %c: \n", dados.status); puts("Status L = locado\n"); // Posiciona novamente o cursor sobre o registro desejado. fseek(arq,sizeof(struct ficha) * nreg, SEEK_SET);//seek_set começa da posição corrente fwrite(&dados, sizeof(dados), 1, arq);//escreve os novos dados no arquivo if (!ferror(arq))//se não der erro { puts(""); puts("LOCACAO REALIZADA"); } else { puts("ERROR!!"); } }//fim if que filtra se nao esta locado else { puts(""); puts("Filme ja se encontra em status L = Locado"); puts("Clique em enter para voltar ao menu principal"); } system("pause"); } else puts("FILME NAO ESTA CADASTRADO OU NAO ESTA DISPONIVEL"); fflush(stdin); getchar(); } //Função para a devoluçao do filme void DevolucaoFilme() { int codigo; int nreg; system("cls"); puts("** DEVOLUCAO DO FILME ***\n"); printf("Digite o codigo do filme para registar a devolucao......:"); fflush(stdin); scanf("%d",&codigo); nreg = Buscar(codigo); if ( nreg >=0 ) //if principal de busca se tem na lista o codigo digitado { if(dados.status != 'D') {//if que filtra quem nao esta disponivel para devolver printf("Status ..: %c\n",dados.status); fflush(stdin); dados.status = 'D'; printf("Novo Status..: %c -> Disponivel\n", dados.status); puts(""); // Posiciona novamente o cursor sobre o registro desejado. fseek(arq,sizeof(struct ficha) * nreg, SEEK_SET);// seek_set procura da posição corrente o cursor fwrite(&dados, sizeof(dados), 1, arq); if (!ferror(arq)) { puts("DEVOLUCAO REALIZADA"); } else { puts("ERROR!!"); } }//fim if que filtra que nao esta devolvido para mudar o status else { puts(""); puts("Filme ja se encontra em status D = Disponivel ou Devolvido"); puts("Clique em enter para voltar ao menu principal"); } system("pause"); }//fim if principal de busca se tem na lista o codigo digitado else { puts("FILME NAO ESTA CADASTRADO OU NAO ESTA DISPONIVEL"); fflush(stdin); getchar(); } } //Função para exclui filme void ExcluirFilme() { char opcao; int codigo; int nreg; system("cls"); puts("** EXCLUSAO DE FILME ***"); printf("Codigo do filme......:"); fflush(stdin); scanf("%d",&codigo); nreg = Buscar(codigo); if ( nreg >=0 ) { printf("num %d\n",nreg); printf("Nome do filme..: %s\n",dados.filme); printf("CONFIRMA EXCLUSAO DO FILME <S/N>?"); fflush(stdin); opcao = toupper(getchar()); if (opcao == 'S') { fseek(arq,sizeof(struct ficha) * nreg, SEEK_SET);//procura os dados da posição corrente (seek_set) // Exclusão Lógica dados.ativo = 0;// quando ativo = 0, ele é excluído logicamente fwrite(&dados, sizeof(dados), 1, arq);//registra novos dados if (!ferror(arq)) puts("FILME EXCLUIDO."); else puts("ERRO!!"); } } else puts("FILME NAO ENCONTRADO."); fflush(stdin); getchar(); } //Função para consultar filme void ConsultarFilme(){ int codigo; int nreg; system("cls"); puts("** CONSULTA DE FILMES ***\n"); printf("Codigo do Filme ......:"); fflush(stdin); scanf("%d",&codigo); nreg = Buscar(codigo); if ( nreg >= 0 ) // se não atingou -1, ele achou um codigo correspondente, e imprimirá o conteúdo, usado pelo função buscar { if(dados.status == 'D') { printf("num %d\n",nreg); printf("Codigo: %d\n Filme ..: %s\n Categoria: %s\n Duracao: %.2f Hs \n Status: %c -> Disponivel\n", dados.codigo, dados.filme, dados.categoria, dados.duracao, dados.status); } else { printf("num %d\n",nreg); printf("Codigo: %d\n Filme ..: %s\n Categoria: %s\n Duracao: %.2f Hs \n Status: %c -> Locado\n", dados.codigo, dados.filme, dados.categoria, dados.duracao, dados.status); } } else puts("FILME NAO ENCONTRADO."); fflush(stdin); getchar(); } //Função para listar as categoria cadastradas void listarCategorias() { rewind(arq); //posiciona na primeira linha do arquivo // inicia funcao mostra categoria fread(&dados,sizeof(struct ficha),1,arq); //le os dados puts("Categorias registradas para fazer a busca"); puts(""); if (!ferror(arq)) //se não der erro pela função ferror while (!feof(arq)) //feof informa se chegou ao fim do arquivo, se for diferente entra continua no loop do while { if (dados.ativo)// o if identifica se o valor é verdadeiro automaticamente que é 1, se 1 ele existe, se 0, //não existe, na função de exclusão, ter filmes que estarão com ativo = 0 e não aparecerão na listagem printf("%s \n",dados.categoria); fread(&dados,sizeof(struct ficha),1,arq); //le os dados selecionados } else { puts("ERROR!!"); fflush(stdin); getchar(); } puts(""); //Fim funcao mostra categorias } //Função para listar todos os filmes no arquivo void ListarFilme() { system("cls"); puts("***** LISTA DE FILMES*****\n"); rewind(arq); //posiciona na primeira linha do arquivo fread(&dados,sizeof(struct ficha),1,arq); //le os dados if (!ferror(arq)) //se não der erro pela função ferror while (!feof(arq)) //feof informa se chegou ao fim do arquivo, se for diferente entra continua no loop do while { if (dados.ativo)// o if identifica se o valor é verdadeiro automaticamente que é 1, se 1 ele existe, se 0, //não existe, na função de exclusão, ter filmes que estarão com ativo = 0 e não aparecerão na listagem printf("Codigo: %d \n Filme: %s: \n Duracao: %.2lf hs\n Categoria: %s\n Status: %c\n Ativo: %d \n\n",dados.codigo,dados.filme,dados.duracao,dados.categoria,dados.status,dados.ativo); fread(&dados,sizeof(struct ficha),1,arq); //le os dados selecionados } else puts("ERROR!!"); fflush(stdin); getchar(); } //Função para listar os filmes por categoria void ListarFilmeCategoria() { char categoria[TAM];// variavel categoria para comparar durante a busca e imprimir caso seja condizente system("cls");//limpa a tela do menu puts("***** LISTA DE FILMES POR CATEGORIA*****\n"); // listarCategorias(); listarCategorias();//Funcao lista categorias registradas para facilitar a busca puts("Digite a categoria de filmes"); scanf("%s",&categoria); rewind(arq); //posiciona na primeira linha do arquivo, para começar a busca do começo fread(&dados,sizeof(struct ficha),1,arq); if (!ferror(arq)) // se for diferente de erro da função ferror while (!feof(arq)) //feof informa se chegou ao fim do arquivo, se for diferente entra continua no loop do while { if (strcmp(dados.categoria, categoria) == 0)// comparando pelo strcmp se for igual, imprime os dados da struct que o cursor está buscando dados printf("Codigo: %d \n Filme: %s: \n Duracao: %.2lf hs\n Categoria: %s\n Status: %c\n Ativo: %d \n\n",dados.codigo,dados.filme,dados.duracao,dados.categoria,dados.status,dados.ativo); fread(&dados,sizeof(struct ficha),1,arq); //fread, retorna um número inteiro correspondente a quantidade de bytes lidos } else puts("ERROR!!"); fflush(stdin); getchar(); } //Função para excuir todos os filmes do arquivo void excluirTodos(){ int op; printf("Deseja Realmente excluir todos os filmes? \n [1-Sim ou 2-nao]: "); scanf("%d",&op); if (op == 1){ struct ficha; FILE * arquivo; arquivo = fopen("FILMES.txt","w"); printf("Todos excluidos com Exito!"); fclose(arquivo); } getch(); } /*void libera(){ free(dados); }*/ //Função menu void Menu() { system("cls"); system("color 1F"); puts("|-----------------------------------------------|"); puts("| Programador: JEDERSON YAGO / FRANCISCO RUAN |"); puts("|-----------------------------------------------|"); puts("| PROGRAMA DE CONTROLE DE LOCADORA |"); puts("|----------------------MENU---------------------|"); puts("| |"); puts("| 1. Inclusao Filmes |"); puts("| 2. Consulta Filmes por codigo |"); puts("| 3. Locar um Filme |"); puts("| 4. Devolver um Filme |"); puts("| 5. Excluir Filme |"); puts("| 6. Listar Filmes |"); puts("| 7. Listar Filmes por categoria |"); puts("| 8. Excluir todos os filmes |"); puts("| 0. Sair |"); puts("| |"); puts("|-----------------------------------------------|\n"); } //Função para a escolha da opção desejada void opções(){ int opcao; do{ Menu(); printf("Selecione uma opcao: "); scanf("%d", &opcao); switch(opcao) //usando switch case, chamamos as funções de acordo com as opções escolhidas { case 1: RegistrarFilme(); break; case 2: ConsultarFilme(); break; case 3: Locar(); break; case 4: DevolucaoFilme(); break; case 5: ExcluirFilme(); break; case 6: ListarFilme(); break; case 7: ListarFilmeCategoria(); break; case 8: excluirTodos(); case 0: puts("Programa finalizado"); break; default: puts("Opcao Invalida"); } } while (opcao != 0); } || filmes.h || #define FILMES_H_INCLUDED #ifndef FILMES_H_INCLUDED //PROGRAMADOR JEDERSON YAGO / FRANCISCO RUAN //DISCIPLINA: ALGORITMOS E ESTRUTURA DE DADOS I typedef struct ficha ficha; AbrirArquivo(char filme[]); FecharArquivo(); RegistrarFilme(); Buscar(int codigo); AlterarStatus(); DevolucaoFilme(); ExcluirFilme(); void excluirTodos(); ListarFilme(); #endif || main || #include <stdio.h> #include <stdlib.h> #include <string.h> #include "filmes.h" #define TAM 30 //PROGRAMADOR JEDERSON YAGO / FRANCISCO RUAN //DISCIPLINA: ALGORITMOS E ESTRUTURA DE DADOS I int main(){ system("cls"); AbrirArquivo("FILMES.txt"); opções(); FecharArquivo(); system("pause"); } Nova pasta (4).rar
  10. @isrnick esse é o problema eu não sei como iniciar kkk, mas tudo bem, obrigado mesmo assim.
  11. Criar um programa que compara as informações do vetorA com o vetorB e mostrar quais caracteres são igual usando strings. Bom, estou tentando fazer essa questão mas não consigo nem iniciar, allguem pode fazer e me explicar com que faz?
  12. @AnsiC certo, agora sim entendi, muito obrigado.
  13. @dudaskank não entendi muito bem kkk pode colocar um trecho do codigo?
  14. Alguem poderia me ajudar? tem uma questão de uma lista que estou respondendo que pede para criar uma função que receba como parametro um vetor de numeros inteiros de tamanho n e retorne quantos numeros pares estão armazenados nesse vetor int pares( int n, int* vet); eu não coloquei nenhum codigo porque não sei como iniciar. não consigo fazer ela, se alguem fizer e me explicar como fez iria ajudar muito, desculpe sou iniciante em c ainda.

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!