Ir ao conteúdo
  • Cadastre-se

herbertbahia

Membro Pleno
  • Posts

    542
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de herbertbahia em Elaboração de Programação em portugol. foi marcado como solução   
    .
     
    Algoritmo "MATRIZ 4X4" // Descrição : CADASTRO DE MORADORES // Autor(a) : PABLO MASCARENHAS // Data atual : 26/02/2023 Var // Seção de Declarações das variáveis MORADORES : VETOR[1..4, 1..4] DE caractere I,J : INTEIRO ROTULO : VETOR[1..4] DE CARACTERE Inicio // Seção de Comandos, procedimento, funções, operadores, etc... ESCREVAL("DIGITE O NOME DO CONDOMINIO") ROTULO[1]<- "NUMERO DA CASA:" ROTULO[2]<- "QUANTIDADE DE CARRO:" ROTULO[3]<- "MODELO DO CARRO:" ROTULO[4]<- "PLACA DO CARRO:" ESCREVAL("DIGITE OS DADOS DO MORADOR") PARA I DE 1 ATE 4 FACA ESCREVAL("MORADOR", I+0) LIMPATELA PARA J DE 1 ATE 4 FACA ESCREVA(ROTULO[J]) LEIA(MORADORES[I,J]) FIMPARA ESCREVAL() FIMPARA ESCREVAL("FIM DOS DADOS") ESCREVAL("DADOS DIGITADOS") PARA I DE 1 ATE 4 FACA PARA J DE 1 ATE 4 FACA ESCREVA(MORADORES[I,J], " ") FIMPARA ESCREVAL() FIMPARA Fimalgoritmo  
  2. O post de herbertbahia em código para calcular salário com descontos do inss e ir foi marcado como solução   
    Olá! Há alguns problemas no código que você apresentou que podem estar impedindo o cálculo correto do desconto do INSS e do IR. Aqui estão algumas sugestões de como corrigi-los:
    A condição if (salario_bruto <= 1903.98) deve ser a primeira verificação a ser feita, pois se o salário for menor do que esse valor, o desconto do IR é zero e o cálculo deve ser encerrado ali. No código atual, essa verificação só é feita depois das verificações do INSS.
    Para calcular o desconto do IR, você precisa primeiro subtrair o valor do INSS do salário bruto. No código atual, o desconto do INSS é calculado, mas não é subtraído do salário bruto antes de calcular o desconto do IR.
    No cálculo do desconto do INSS para salários acima de R$ 5.646,80, o valor do desconto está incorreto. O correto seria subtrair um valor fixo de R$ 621,04.
    Você precisa declarar as variáveis inss, ir e salario_liquido e inicializá-las com zero. Caso contrário, o valor dessas variáveis pode ser indefinido e o cálculo do salário líquido pode não ser correto.
    Com essas sugestões em mente, aqui está uma versão corrigida do seu código:
    #include <iostream> int main(int argc, char** argv) { float salario_bruto, inss, ir, salario_liquido = 0; printf("Digite seu Salario Bruto: "); scanf("%f", &salario_bruto); if (salario_bruto <= 1903.98) { ir = 0; } else if (salario_bruto <= 2826.65) { ir = (salario_bruto - inss) * 0.075 - 142.80; } else if (salario_bruto <= 3751.05) { ir = (salario_bruto - inss) * 0.15 - 354.80; } else if (salario_bruto <= 4664.68) { ir = (salario_bruto - inss) * 0.225 - 636.13; } else { ir = (salario_bruto - inss) * 0.275 - 869.36; } if (salario_bruto <= 1693.72) { inss = salario_bruto * 0.08; } else if (salario_bruto <= 2822.90) { inss = salario_bruto * 0.09; } else if (salario_bruto <= 5645.80) { inss = salario_bruto * 0.11; } else { inss = 621.04; } salario_liquido = salario_bruto - inss - ir; printf("\nDesconto INSS: R$ %.2f\n", inss); printf("Desconto IR: R$ %.2f\n", ir); printf("Salario liquido: R$ %.2f\n", salario_liquido); return 0; }  
  3. O post de herbertbahia em Exercício PARA/ATÉ. Resolver sem a gambiarra foi marcado como solução   
    Para atribuir a idade da mulher mais jovem sem usar a gambiarra de atribuir um valor muito alto para a variável menor, você pode inicialmente atribuir um valor muito alto para a variável menorF e, ao mesmo tempo, inicializar a variável menorF como -1. Isso garante que, ao comparar a idade da mulher mais jovem com a variável menorF, a condição de atualização da variável menorF só será satisfeita se a idade for realmente menor do que o valor atual de menorF.
    Para fazer isso, basta alterar a linha de inicialização da variável menorF para:
    menorF <- -1 Em seguida, na condição de atualização da variável menorF, você deve verificar se a idade é menor do que o valor atual de menorF e se a idade é maior ou igual a zero. Isso é necessário para garantir que a idade não seja negativa ou zero, o que não faz sentido neste contexto.
    A condição de atualização da variável menorF ficaria assim:
    Se(sexo="F") E (IDADE<MENORF) E (IDADE>=0) então menorF <- idade FIMSE Com essas alterações, a variável menorF será atualizada somente quando a idade for realmente menor do que o valor atual de menorF e maior ou igual a zero.
  4. O post de herbertbahia em Função do python não me retornar o valor foi marcado como solução   
    O código estava retornando um "bound method" porque você está tentando chamar uma função como se fosse uma propriedade (sem os parênteses).
    Para chamar uma função, é necessário usar os parênteses, assim:
    print(variaveis.valor_x1()) print(variaveis.valor_x2())
    Isso vai chamar as funções e retornar os valores corretos.
    Além disso, no código da classe Variaveis, ambas as funções valor_x1 e valor_x2 possuem o mesmo código. Isso pode ser um erro e pode levar a resultados incorretos. É preciso verificar se o código está correto e, se necessário, corrigi-lo.
  5. O post de herbertbahia em qual atalho muda o nome apenas dos em uso pelo mesmo "namespace"? foi marcado como solução   
    Sim, o Visual Studio Code também possui uma funcionalidade semelhante chamada "Refatoração". Ela permite que você altere o nome de uma variável, função ou outro elemento do código de maneira rápida e precisa, atualizando automaticamente todas as referências a ele em todo o projeto.
    Para usar a refatoração no Visual Studio Code, basta selecionar o elemento que deseja renomear, pressionar a tecla F2 (ou clicar com o botão direito do mouse e escolher "Renomear") e digitar o novo nome. O Visual Studio Code atualizará automaticamente todas as referências ao elemento no projeto.
    Além disso, o Visual Studio Code também possui outras funcionalidades de refatoração, como a capacidade de extrair uma variável ou função para um novo arquivo ou módulo, ou ainda mover um elemento de um arquivo para outro. Para acessar essas opções, basta clicar com o botão direito do mouse no elemento e escolher a opção "Refatorar" no menu de contexto.
  6. O post de herbertbahia em como fazer SUM (somar) valores filtrada em datas de inicio e fim com BETWEEN? foi marcado como solução   
    talvez este exemplo te ajude
     
    <?php // String de conexão com o banco de dados $dsn = 'mysql:host=localhost;dbname=nome_banco'; $user = 'usuario'; $password = 'senha'; // Cria a instância da classe PDO $pdo = new PDO($dsn, $user, $password); // Escreve a consulta SELECT para realizar a soma dos valores filtrados pelo intervalo de datas $query = "SELECT SUM(valor) FROM tabela WHERE data BETWEEN :data_inicio AND :data_fim"; // Prepara a consulta $stmt = $pdo->prepare($query); // Vincula os valores das variáveis à consulta $stmt->bindValue(':data_inicio', '2022-01-01'); $stmt->bindValue(':data_fim', '2022-01-31'); // Executa a consulta $stmt->execute(); // Armazena o resultado da consulta em uma variável $  
  7. O post de herbertbahia em App Android + SQL Server foi marcado como solução   
    Existem várias linguagens de programação que podem ser usadas para desenvolver aplicativos usando o ERP Protheus da TOTVS e o banco de dados SQL Server. Algumas opções populares incluem:
    C#: C# é uma linguagem de programação orientada a objetos criada pela Microsoft. Ela é amplamente utilizada para desenvolver aplicativos desktop, web e móveis, e é compatível com o banco de dados SQL Server.
    Java: Java é uma linguagem de programação orientada a objetos amplamente utilizada para desenvolver aplicativos em várias plataformas. Ela é compatível com o banco de dados SQL Server e pode ser usada para desenvolver aplicativos web, desktop e móveis.
    PHP: PHP é uma linguagem de programação amplamente utilizada para desenvolver aplicativos web. Ela é compatível com o banco de dados SQL Server e pode ser usada para desenvolver aplicativos web usando o ERP Protheus da TOTVS.
    Python: Python é uma linguagem de programação de alto nível que pode ser usada para desenvolver aplicativos desktop, web e móveis. Ela é compatível com o banco de dados SQL Server e pode ser usada para desenvolver aplicativos usando o ERP Protheus da TOTVS.
    Essas são apenas algumas das opções disponíveis. A escolha da linguagem de programação dependerá de suas necessidades e preferencias pessoais, bem como da plataforma e do tipo de aplicativo que você está desenvolvendo.
  8. O post de herbertbahia em Erro ao conectar no banco de dados postgresql foi marcado como solução   
    entendir, apesar de um ser desktop e outro web a classe de conexao e quase a mesma coisa só muda o jars mesmo, nao tem porque nao funcionar é só da uma conferida na senha do bdd boa sorte nos estudos
  9. O post de herbertbahia em Função de Delay em C foi marcado como solução   
    @Pedrockz Sleep só funciona em windows. mas você pode usar a biblioteca time veja este exemplo
    #include <stdio.h> #include <windows.h> #include <time.h> int main () { time_t start_t, end_t; double diff_t; printf("Inicio do programa...\n"); time(&start_t); while(diff_t<=5.000000){ time(&end_t); diff_t = difftime(end_t, start_t); } printf("pronto passou 5 segundo\n"); return(0); }  
  10. O post de herbertbahia em Implementar um algoritmo que leia um arquivo CSV e ordene primeira coluna foi marcado como solução   
    @Aislan_R é melhor postar o csv junto acho que fica mais fácil de te ajudarem, inclusive tambem to com esse mapa pendente em ed1, o de ed 2 eu fiz diferente.
  11. O post de herbertbahia em estrutura de Pilha em C função foi marcado como solução   
    porque em pilha o ultimo a entrar e o primeiro a sair essa e a regra
      @Rafael LXP veja esse exemplo
    #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct pilha{ int topo; int dado; struct pilha *prox; ; } Tno_ls; int inicializa (Tno_ls **p); int empilha (Tno_ls **p, int info); int desempilha (Tno_ls **p); int estado(Tno_ls *p); int listar(Tno_ls *p); int obter_topo(Tno_ls *p, int *dado); int transfere(Tno_ls *p, Tno_ls **p2); /* ----------------------------------------------------------------------------- */ int main(void) { int info; int erro; /* valor de erro retornado pelas funcoes */ Tno_ls *s, *s2; inicializa(&s); inicializa(&s2); int q; /* receber a opcao do usuario */ do { printf("1 -> Inicializa \n"); printf("2 -> Insere\n"); printf("3 -> Remove\n"); printf("4 -> Verifica Estado de Vazio\n"); printf("5 -> Lista \n"); printf("6 -> Obter Topo \n"); printf("7 -> Transferir para outra pilha \n"); printf("8 -> Listar pilha 2! \n:"); printf("9 -> Sair \n:"); scanf("%d", &q); /* Ler a opcao do usuario */ switch(q) { case 1: erro=inicializa (&s); printf("\nInicializacao realizada com sucesso !\n"); printf("\nPilha VAZIA \n"); break; case 2: printf("Dado para insercao: "); scanf("%d",&info); erro=empilha(&s,info); if (erro==1) printf("\nPilha cheia. Overflow\n"); break; case 3: erro=desempilha(&s); if (erro==1) printf("\nPilha Vazia. Underflow\n"); if(erro == 0) printf("\nRemocao realizada com sucesso!\n"); break; case 4: erro=estado(s); if (erro == 0) printf("\nA pilha esta vazia.\n"); if (erro == 2) printf("\nA pilha esta em condicoes de uso\n"); if(erro == 1){ printf("\nPilha com apenas 1 item.\n"); } break; case 5: erro= listar(s); if (erro == 1) printf("\nA pilha esta vazia.\n"); break; case 6: erro=obter_topo(s, &info); if (erro == 0) { printf("Dado no topo: %d\n", info); }else printf("Pilha vazia. Sem topo\n"); break; case 7: erro= transfere(s, &s2); if (erro == 0) { printf("Transferencia realizada\n"); listar(s2); } else printf("erro na transferencia"); break; case 8: erro= listar(s2); if (erro == 1) printf("\nA pilha esta vazia.\n"); break; case 9: break; default: printf("\n\n Opcao nao valida"); } getchar(); /* Limpa o buffer de entrada */ } while ((q != 9) ); } /* ---------------------------------------------------------------------- */ int inicializa(Tno_ls **p){ *p = NULL; return 0; } /* ---------------------------------------------------------------------- */ int empilha (Tno_ls **p, int info){ Tno_ls *celula_nova, *percorre; celula_nova = (Tno_ls*)malloc(sizeof(Tno_ls)); celula_nova->dado = info; celula_nova->prox = NULL; if((*p) == NULL){ /* lista vazia */ (*p) = celula_nova; return 0; }else{ percorre = (*p); (*p) = celula_nova; (*p)->prox = percorre; return 0; } } /* --------------------------------------------------------------------------- */ int desempilha (Tno_ls **p){ Tno_ls *percorre = (*p), *aux; int erro = estado(*p); if(erro == 0){ //Lista vazia return 1; }else if(erro == 1){ //Lista com apenas 1 item inicializa(p); } else{ //lista com 2 ou mais itens aux = percorre; percorre = percorre->prox; free(aux); (*p) = percorre; return 0; } return 0; } /* --------------------------------------------------------------------------- */ int estado(Tno_ls *p){ if(p == NULL){ return 0; }else if(p->prox == NULL){ return 1; } else{ return 2; } } /* -------------------------------------------------------------------- */ int listar(Tno_ls *p){ Tno_ls *percorre = p; if(percorre == NULL){ //Lista vazia return 1; }else{ printf("\nTOPO ->"); while(percorre->prox != NULL){ printf(" %d ->", percorre->dado); percorre = percorre->prox; } printf(" %d\n", percorre->dado); return 0; } } /* ------------------------------------------------------------------- */ int obter_topo(Tno_ls *p, int *dado){ if(p == NULL){ // Lista vazia return 1; } *dado = p->dado; return 0; } /* ------------------------------------------------------------------- */ int transfere(Tno_ls *p, Tno_ls **p2){ Tno_ls *percorre = p; Tno_ls *pilhaAux; inicializa(&pilhaAux); Tno_ls **percorre2 = &pilhaAux; int erro = estado(p); if (erro >= 1) { while(percorre->prox != NULL){ empilha(&pilhaAux, percorre->dado); percorre = percorre->prox; } empilha(&pilhaAux, percorre->dado); printf("\nTransferindo: 50%%\n"); printf("\nLista da pilha auxiliar\n"); listar(pilhaAux); while((*percorre2)->prox != NULL){ empilha(p2, (*percorre2)->dado); (*percorre2) = (*percorre2)->prox; } empilha(p2, (*percorre2)->dado); printf("\nTransferindo: 100%%\n"); return 0; } return 1; }  
  12. O post de herbertbahia em Voltar ao menu principal com laços foi marcado como solução   
    #include <stdio.h> #include <stdlib.h> int main() { int menu; // MENU int num1, num2, soma; // SOMA int num3, num4, sub; // SUBTRAÇÃO float num5, num6, div; // DIVISÃO int num7, num8, mult; // MULTIPLICAÇÃO do{ printf("** CALCULADORINHA **\n\n"); printf("1 - Soma\n"); printf("2 - Subtracao\n"); printf("3 - Divisao\n"); printf("4 - Multiplicacao\n"); printf("5 - Sair\n\n"); printf("DIGITE UMA OPCAO DO MENU: "); scanf("%d", &menu); printf("\n"); switch(menu){ case 1: printf("Digite um Numero: "); scanf("%d", &num1); printf("Digite um Segundo Numero: "); scanf("%d", &num2); soma = num1 + num2; printf("%d + %d = %d", num1, num2, soma); break; case 2: printf("Digite um Numero: "); scanf("%d", &num3); printf("Digite um Segundo Numero: "); scanf("%d", &num4); sub = num3 - num4; printf("%d - %d = %d", num3, num4, sub); break; case 3: printf("Digite um Numero: "); scanf("%d", &num5); printf("Digite um Segundo Numero: "); scanf("%d", &num6); div = num5 / num6; printf("%f / %f = %f", num5, num6, div); break; case 4: printf("Digite um Numero: "); scanf("%d", &num7); printf("Digite um Segundo Numero: "); scanf("%d", &num8); mult = num7 * num8; printf("%d * %d = %d", num7, num8, mult); break; case 5: printf("Finalizando......\n"); printf("Programa Finalizado Com Sucesso!\n"); exit(1); } }while(1); }  
  13. O post de herbertbahia em Maneira de Otimizar Programa foi marcado como solução   
    #include <stdio.h> int main(){ int num[3],i,aux,j; for (i=0;i<3;i++){ printf("Digite o numero %d: ",i+1); scanf("%d",&num[i]); } for (i=0;i<3;i++){ for( j=i+1; j<3; j++ ){ if( num[i] > num[j] ){ aux = num[i]; num[i] = num[j]; num[j] = aux; } } } for(i=0;i<3;i++){ printf(" %d \n",num[i]); } }  
  14. O post de herbertbahia em Imprimir maior e menor numero primo foi marcado como solução   
    #include <stdio.h> #include <stdlib.h> #include <locale.h> //Escreva um programa que lê um número n, e então imprime o menor número primo que é maior ou igual n, e imprime o maior primo que é menor ou igual a n. int main(){ setlocale(LC_ALL, "Portuguese"); int n,k,j,primo,num,n2,k2,primo2,num2; printf ("Entre com o numero:"); scanf ("%d",&num); if (num<=1) return main(); num2=num; j=num; maior: for(n=num; n<=num*num; n++){ primo=0; for(k=1; k<=n; k++) if((n%k)==0) primo++; if(primo>2||num2==num){ num=num+1; goto maior; } else{ printf("%d\n", n); break; goto menor; } } menor: for(n2=num2; n2<=num2*num2; n2++){ primo2=0; for(k2=1; k2<=n2; k2++) if((n2%k2)==0) primo2++; if(primo2>2||n2==j){ num2=num2-1; goto menor; } else{ printf("%d\n", n2); break; } } }  
  15. O post de herbertbahia em Retirar o Maior e Menor valor de um laço de repetição foi marcado como solução   
    #include <stdio.h> #include <string.h> #include<locale.h> int main (){ setlocale(LC_ALL,""); char time[20],timecampeao[20],timeperdedor[20]; int i, vit,emp,der,pontos,menor=1000,maior; do{ printf("\nInforme o nome do time %d sem espaço: ",i+1); scanf("\n%s",time); printf("Num de vitorias:"); scanf("\n%d",&vit); pontos=vit*3; printf("Num de empates:"); scanf("\n%d",&emp); pontos=pontos+emp; printf("Num de derrotas:"); scanf("\n%d",&der); printf("\nPontuacao: %d\n", pontos); if(pontos>maior){ maior=pontos; strcpy(timecampeao,time); } if(pontos<menor){ menor=pontos; strcpy(timeperdedor,time); } i+=1; }while (i<3); printf("\nCampeao: %s Pontuacao: %d\n",timecampeao,maior); printf("Ultimo Colocado: %s Pontuacao: %d",timeperdedor,menor); }  
  16. O post de herbertbahia em Entrada de caracteres em Matriz tipo Char em . foi marcado como solução   
    claro voce esta declarando matriz de 5 linhas e 1 coluna sem falar no laço kk tente algo assim
    # include <iostream> using namespace std; int main(void){ char alunos[5][20]; void Nomes_alunos(char alunos[5][20]); Nomes_alunos(alunos); } void Nomes_alunos(char alunos[5][20]){ // Função para receber os nomes dos alunos int l,c; cout<<"\n Digite os nomes dos Alunos: "; for(l=0;l<5;l++){ for(c=0;c<5;c++){ cin>>alunos[l][c]; } } for(l=0;l<5;l++){ for(c=0;c<5;c++){ cout<<alunos[l][c]; } } }  
  17. O post de herbertbahia em Programa estatistica de candidatos foi marcado como solução   
    gets que é um comando muito conhecido para leitura de string da biblioteca padrão do C (stdio) pode gerar um grande problema como essa função não limita o número de caracteres a serem lidos da entrada padrão (stdin), pode haver vazamento de memória, ou até pior, injeção de código malicioso no programa.
    notação:
    gets( str );
     
    A solução é usar fgets, que limita o buffer de leitura.
    sua notação:
     
    char * fgets (char * string, int tamanho, FILE * fluxo);
    mas o que significa isso tudo?
     
    string representa Cadeia de caracteres a ser lida que no nosso caso é sexo ou sexo caixinha com i dentro como preferir.
    tamanho - Número máximo de caracteres a serem lidos na cadeia de caracteres string que no nossso caso cabe até 21 mas so precisavamos o suficiente para colocar a letra da resposta dentro nem precisava isso tudo kkk.
    fluxo - Ponteiro para um objeto FILE que será utilizado como entrada. Para ler da entrada padrão, utilizar stdin como fizemos.
    eu coloquei [50][3] que representa uma matriz de 50 linhas por 3 colunas ou seja em cada linha vai ficar 1 letra ou palavra armazenada e nois precisamos de 50 que é o total que o exercicio pede. e precisamos de 3 colunas para escrever o que precisamos.
    vamos imaginar isto melhor:

    int idade tem 50 linhas mas nao tem 50 colunas porque como sao apenas numeros podem ser armazenados em um unico vetor
    mas essa mistureba toda de char com int no mesmo laço gera elementos no "buffer" que precisa ser limpo.
    então como limpa?
    vamos usar uma função que se chama setbuf(stdin, NULL) que traduzindo para portugues significa definir buffer nulo
    para o \0 ficar no final.
    tambem sou estudante ainda mas espero que posso ter te ajudado.
  18. O post de herbertbahia em Programa idade mais velho e mais novo foi marcado como solução   
    #include <stdio.h> #include <stdlib.h> #define max 50 int main(){ int cont=1,idade,a,homem,mulher,maisvelho=0,maisnovo=5000,maisvelha=0,maisnova=5000; char sexo; while (cont <= max){ printf ("\nDigite a idade da %da pessoa : ",a); scanf("%d", &idade); printf ("\nDigite o sexo da %da pessoa(M ou F): ",a); scanf(" %c", &sexo); if (sexo=='m'||sexo=='M'){ homem+=1; if (idade>maisvelho) maisvelho=idade; if (idade<maisnovo) maisnovo=idade; } else if (sexo=='f'||sexo=='F'){ mulher+=1; if (idade>maisvelha) maisvelha=idade; if(idade<maisnova) maisnova=idade; } else{ printf("ERROR: Este programa nao conta emafroditas."); return (0); } cont+=1; a++; } system ("cls"); if (homem!=0) printf("Total de homems :%d \n",homem); if (mulher!=0) printf("Total de mulheres : %d \n",mulher); if (maisnova!=5000) printf("Idade da mulher mais nova : %d \n",maisnova); if (maisvelha!=0) printf("Idade da mulher mais velha : %d \n",maisvelha); if (maisnovo!=5000) printf("Idade do homem mais novo : %d \n",maisnovo); if (maisvelho!=0) printf("Idade do homem mais velho :%d \n",maisvelho); }  
  19. O post de herbertbahia em Problema com enunciado do professor foi marcado como solução   
    @Ragnarbrody
    #include<stdio.h> #include<stdlib.h> #include<windows.h> int main(){ int n=0, m,i,j; printf ("digite N e M:\n"); scanf("%d %d", &n, &m); Sleep(2500); system ("cls"); if (n<=m){ printf("tabuada de %d ao %d", n,m); for (n=n; n<=m; n++){ for (i=0;i<=m;i++){ printf("\n%d * %d = %d", n,i,n*i); } } } else{ //printf("tabuada de %d ao %d", m,n); } }  

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!