Ir ao conteúdo
  • Cadastre-se

Luccas Fernando

Membro Pleno
  • Posts

    36
  • Cadastrado em

  • Última visita

posts postados por Luccas Fernando

  1. Olá.

    O VisualG parece ter uma grande dificuldade de interpretar condicionais ao ponto que 99% dos problemas com Portugol é esse tal "Esperava encontrar ENTAO" 😅

    Sinceramente não sei o que poderia estar errado nesse pseudocódigo de bubblesort...

    Var
    
    val: vetor [0..49] de inteiro
    i, j, k, op, ops, vals, orn, cond, ret: inteiro
    
    funcao bubblesort(): inteiro
    var
    aux, indi, indj: inteiro
    inicio
          para indi de 0 ate i faca
               para indj de (i - 1) ate indi passo (-1) faca
                    se (val[indj] < val[indj-1]) entao
                      aux <- val[indj]
                      val[indj] <- val[indj-1]
                      val[indj-1] <- aux
                   fimse
               fimpara
          fimpara
          retorne 0
    fimfuncao

    Ele acusa um problema justamente nessa linha:

    se (val[indj] < val[indj-1]) entao

    Esse pseudocódigo tirei daqui:

    image.png.9409ee1cddb5fd4aa5e9420b614fe9e7.png

    Inclusive ele só aceita mais de uma operação condicional em um SE caso elas estejam entre parênteses, fiquei uns 20 minutos quebrando a cabeça por isso já que o erro em si não é indicado pelo VisualG, uma palhaçada esse interpretador 🤡

    • Curtir 1
  2. Boa noite, colegas :)

    Venho aqui pedir uma ajuda, já que não sei como prosseguir com os cálculos desse circuito comparador com histerese... Coloquei todos os dados na imagem:

    image.png.261b11a66b2305d414898fafdb574bdb.png

    Em suma, ele aciona com 15V e desliga com 14.5V.

    Não achei nada assim no meu livro, estranhei principalmente pela colocação dos resistores.

    Não achei algo com essa configuração na internet também, agradeço se puderem me dar uma orientação de como calcular os resistores.

  3. As funções f(a) que estou experimentando são as funções exponencial e logarítmica:

    image.png.df77e7523918351408d97e0df06b4f1a.png

    O código é esse:

    clear, clc, clf,
    
    x = [1:5];
    a = 2;
    
    
    for k = 0:4
        P1(k+1) = (diff(exp(a), a, k+1) / factorial(k)) * (x(k+1) - a)^k;
        P2(k+1) = (diff(log(a), a, k+1) / factorial(k)) * (x(k+1) - a)^k;
    end
    
    tab = [x' P1' P2'];
    
    figure(1),clf
    plot(x, P1, 'ro--');
    hold on
    plot(x, P2, 'b*:');

    O seguinte erro aparece:

    Subscripted assignment dimension mismatch.
    
    Error in atv2 (line 8)
        P1(k+1) = (diff(exp(a), a, k+1) / factorial(k)) * (x(k+1) - a)^k;

    Agradeço se puderem me ajudar com o código...

  4. #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
        float f = 1.559f;
        float g = f * 100.0f;
        printf("%f %f", f, g);
        return 0;
    }

    Alguém saberia dizer o motivo de ser este o resultado?

    1.559000 155.899994

    E não

    1.559000 155.900000

    Talvez seja a imprecisão na representação do número, mas não sei dizer o real motivo.

  5. Estou procurando saber a maior quantidade de dígitos de um número que pode ser atribuído à variáveis dos tipos float, double e long double. Estudei o IEEE754 há um tempo, mas já não me lembro tão bem.

    Dando uma olhada por aí, encontrei o seguinte:

    Type Name   | Bytes          | Other Names | Range of Values
    float       | 4              | none        | 3.4E +/- 38 (7 digits)
    double      | 8              | none        | 1.7E +/- 308 (15 digits)
    long double | same as double | none        | Same as double
    
    FLT_MAX		3.402823466e+38F
    DBL_MAX		1.7976931348623158e+308
    LDBL_MAX	1.7976931348623158e+308
    
    FLT_MIN		1.175494351e-38F
    DBL_MIN		2.2250738585072014e-308
    LDBL_MIN	2.2250738585072014e-308

     

    Obrigado pelo esclarecimento.

    • Curtir 2
  6. Como posso verificar se uma variável é unsigned depois de passar o endereço dela pra uma função?

    A variável não estaria inicializada nem nada.

    Eu achei na internet algo assim:

    #define IS_UNSIGNED(type) ((type)~1 > 0)

    Mas só serve pra tipos de dado, e não pra variáveis.

    • Amei 1
  7. 3 horas atrás, alexandre.mbm disse:

    Aliás, ainda estou meio que viajando neste tópico: como você vai usar?

    Acho que é meio irrelevante por hora, mas o intuito é ver quão eficientemente consigo transferir calor da palma da minha mão pra uma superfície com um tubo de calor, e quão eficientemente consigo aproveitar essa energia...

    Certamente vocês entendem desse assunto bem mais que eu, contudo, quero apenas experimentar e brincar com isso, ainda tenho que pesquisar sobre materiais de interface térmica, estou pensado em fazer galinstan, e sobre o efeito Peltier.

     

    1 hora atrás, rmlazzari58 disse:

    Umas ideias aí, quem sabe ajuda?

     

    O pessoal que trabalha com encanamento para gás costuma ter uns retalhos de tubo de cobre jogados por ali, muitas vezes finos como um lápis. Não sei se venderiam em extensão tão pequena quanto a de um lápis, sei lá... uns 15cm, talvez? Essa turma pensa em metros.

     

    Será que sucata, serpentina de alguma máquina (ar condicionado, geladeira, fogão etc.) serviria? Aí talvez dê para encontrar em algum ferro-velho...

     

    Cobre é meio chato de serrar, é muito mole, cremoso, pastoso. Mas com paciência, dá prá fazer.

    Ajuda sim 😁

    Quando acabar essa quarentena eu vou dar uma volta pela cidade e ver se alguma alma de bom coração tem um cano de cobre, acredito que conseguirei encontrar.

    Como sugerido por você e pelos outros colegas, consultarei o pessoal que trabalha com encanamento para gás, ar condicionado, geladeira, etc...

    E acho que consigo selar com solda normal mesmo, se eu achatar um pouco o tubinho da pra soldar.

     

    @devair1010 @alexandre.mbm @.if @rmlazzari58 @Sérgio Lembo @Thiago Miotto

    Agradeço pela ajuda, pessoal.

    Acho que já tenho toda informação que preciso 🙂

    • Curtir 1
  8. Em 24/05/2021 às 00:17, alexandre.mbm disse:

    Desculpe-me não acrescentar. Gostaria de aprender. Qual é a aplicação?

    A ideia é ter em mãos um bom condutor de calor, pra transferir calor da minha mão pra outra superfície.

     

    Em 24/05/2021 às 13:20, rmlazzari58 disse:

    Se a pressão não for muita, silicone comum aguenta até uns 130°C, silicone para junta de motor, até uns 300°C, e vedam bem.

    Posso tentar isso.

    Acredito que não vai ter muita pressão.

     

    Em 24/05/2021 às 14:14, Sérgio Lembo disse:

    Com o vapor não será diferente, se a pressão romper a resistência do invóloco quem estiver por perto vai ficar muito machucado.

    Eu pretendo selar logo quando começar a sair vapor, depois disso eu deixo em algum lugar bem longe de mim pra água condensar :)

     

    Em 24/05/2021 às 23:23, Thiago Miotto disse:

    O autor ainda não falou tamanho de seu experimento.

    Perdão pela demora...

    Não será nada de grandes proporções, talvez um tubo do tamanho de um lápis.

     

    Em 24/05/2021 às 23:23, Thiago Miotto disse:

    Caso quiser continuar, recomendo que coloque uma dessas

    Eu vi alguns tubos de calor no ML:

    image.png.b3486988e8407f5bb6f0641b0663453b.png

    No entanto, acho que é um preço um tanto quanto salgado pra um tubo de cobre com água...

    • Curtir 1
  9. Estou pensando em fazer um tubo de calor para um pequeno projeto, alguém saberia uma "receita"?

    O intuito é fazer um tubo de cobre com água a baixa pressão, minhas dúvidas são:
    Onde posso conseguir algum tubo de cobre?

    Qual a proporção de água que devo colocar?

    Como posso selar o tubo?

    Minha ideia seria colocar água no tubo, aquecê-lo no fogão e selá-lo quando vapor começar a sair. Talvez eu poderia selar com um pedaço de placa de fenolite e um pouco de solda, mas talvez no processo de aquecimento a solda derreta.

  10. @aphawk

    17 horas atrás, aphawk disse:

    1 - Para que haja regulação, o Zener precisa de uma corrente mínima.

    Sim, e a corrente nele não pode exceder a máxima. Segundo o datasheet:
    iz_max = 178mA

    iz_min = 0A (limiar da condução) ou iz_max * 10% = 17.8mA

     

    17 horas atrás, aphawk disse:

    2 - A sua carga possui uma corrente máxima de 1.1A, e para que o Zener consiga regular, ele precisa de pelo menos uns 5 mA ( VIDA REAL...) , portanto a corrente máxima que vai passar por RD será de 1.105 A.

    Isso não seria a corrente mínima em Rd?

    Em 15/05/2021 às 11:02, Luccas Fernando disse:

    ⇒ iRd_min = iz_min + iRL_max (eq. 1)

    ⇒ iRd_max = iz_max + iRL_min (eq. 2)

    iRd_min  = 17.8mA + 1.1A = 1.1178A

    iRd_max =   178mA + 1A   = 1.1780A

    A corrente máxima em Rd seria quando a corrente na carga é mínima e a corrente no zener é máxima.

     

    17 horas atrás, aphawk disse:

    3 - Caso a corrente da carga diminua para 1A, a corrente consumida pelo Zener será de 0.105A, dentro da especificação do mesmo.

    Bem, sim.

    Dessa forma eu terei iRd_max, contudo, nesse caso, o que você me diz é:

    iRd_min  =   5mA + 1.1A   = 1.105A

    iRd_max =  105mA + 1A   = 1.105A

    Então iRd_min = iRd_max? Não entendi isso...

     

    17 horas atrás, aphawk disse:

    Assim, de grosso modo, a corrente a ser utilizada em seu cálculo será de 1,105A.

    Se as correntes mínima e máxima resultantes dos cálculos tiverem um mesmo valor, então sim, pois o valor é único, mas não é meu caso... Há uma pequena diferença.

     

    Eu imagino que devo me manter distante dos extremos, talvez calcular uma média entre iRd_min e iRd_max, mas não sei justificar isso, não tenho certeza do que fazer.

  11. Olá.

    O circuito é esse (será apenas simulado, desconsiderem problemas da vida real)

    image.png.0b7927adab00aa0a7921d6a0542036c5.png

    A tensão no secundário do transformador é 12VCA, a tensão nominal Zener é 5.1V, pretendo obter 5V na saída e 1A.

    Eu pretendo encontrar a capacitância da seguinte forma:
    image.png.d4dc1942460b80561111c04124d365fd.png 

    Bem, em um retificador em ponte com filtro sem regulador, a corrente i é a corrente na carga, mas como eu adicionei um regulador com Zener, nesse caso i seria a corrente que passa em Rd e que se divide entre o Zener e RL (pelo menos acho que é isso, me corrijam se eu estiver errado).

    Eu sei o seguinte:
    iz = iRd - iRL

    ⇒ iRd = iz + iRL

    ⇒ iRd_min = iz_min + iRL_max (eq. 1)

    ⇒ iRd_max = iz_max + iRL_min (eq. 2)

     

    Beleza, Eu também sei que iz_max = 178mA segundo o datasheet, iz_min = 0A, iRL_min = 1A e iRL_max = 1.1A, então eu posso usar tanto a eq.1 quanto a eq.2, mas qual eu uso? E por que?

     

    Agradeço pela atenção.

  12. Estou precisando criar uma biblioteca, mas não sei o que coloco no arquivo .h e no .c, alguém saberia me dizer?

    Só sei que o protótipo das funções se coloca no .h e o corpo delas no .c, não sei o motivo, mas pelo o que vejo por aí é isso.

    Daí me resta saber onde coloco as struct's, typedef's, #define's, #include's, const's.

     

    Agradeço pela atenção.

  13. @arfneto 

    16 minutos atrás, arfneto disse:

    Errado. Não faria sentido. Não vai esperar por nada. Vai ler o que tem pra ler e retornar instantaneamente.

    Eu não sei desligar o line input, mas achei por aí um programa que aparentemente faz isso, e o que ocorre é que o programa pausa porque o buffer está vazio:

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main() {
        HANDLE _handle = GetStdHandle(STD_INPUT_HANDLE);
        DWORD _mode;
    
        GetConsoleMode(_handle, &_mode);
        SetConsoleMode(_handle, _mode & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT));
    
        // o programa para aqui porque o buffer esta vazio
        fgetc(stdin);
    
        SetConsoleMode(_handle, _mode);
    
        return 0;
    }

     

    image.png.ce81fc8d7b9787e752b6e756a9d7463d.png

    Daí se aperto alguma tecla:

    image.png.83739523a5bbe2d7e7cfeb78f87fe650.png

  14. 10 horas atrás, arfneto disse:

    Entenda que você sempre pode desligar o LINE INPUT no Windows e o Cooked Mode no Linux.

    Mas daí ele só não vai esperar por um Enter, certo? Se o buffer estiver vazio, ainda vai pausar o programa aguardando por uma tecla.

     

    10 horas atrás, arfneto disse:

    Em Windows, 

     

    
    
    
    BOOL WINAPI FlushConsoleInputBuffer(
      _In_ HANDLE hConsoleInput
    );

    Eu fiz o seguinte, só pra testar:

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main()
    {
        int _int;
        char _char;
    
        scanf("%d", &_int);
        FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
    
        scanf("%c", &_char);
    
        printf("\nint = (%d)\nchar = (%c)\n", _int, _char);
    
        return 0;
    }

    Mas o '\n' não foi descartado...

    Sei que não deveria estar usando nesse contexto, mas acho que deveria funcionar. Estou fazendo alguma coisa errada?

     

    10 horas atrás, arfneto disse:

    E outra opção é usar, como eu já te mostrei, WaitForSingleObject(). Aqueles 4 programas de menu que eu te mostrei, em C e C++, fazem esse controle.

    Acho que só criei 3 postagens aqui no fórum de C/C#/C++, não achei onde comenta sobre isso.

  15. 28 minutos atrás, arfneto disse:

    Não, não creio haver uma forma de prever o indefinido pois definido estaria.

    No caso eu me referia a prever se fflush(stdin) funcionaria ou geraria UB.

    Como você disse:

    28 minutos atrás, arfneto disse:

    Se for implementado na entrada faz isso por exclusão. É o caso dos compiladores da Microsoft. Se não for, como está na documentação, UB.

    Nos compiladores da Microsoft então, caso implementado na entrada, exclui o que tiver lá, torna vazio, independentemente se já estava. Seria isso?

     

    28 minutos atrás, arfneto disse:

    Entenda que descarregar (flush)  não é apagar (erase, delete).

    Deixa ver se entendi: como o termo não é apagar, então não deveria ser implementado na entrada, certo? Já que você disse que quando implementado na entrada, o buffer é descarregado por exclusão do que tem lá, e esse não seria o propósito de fflush.

     

    28 minutos atrás, arfneto disse:

    O flush só faz isso. Não vê se está vazio. Apenas torna vazio processando tudo que está pendente.

    Há como implementar uma função que faça isso? Que funcione para a stdin?

    As que eu vi pausam o programa quando o buffer está vazio, e servem apenas para consumir os dados que restaram de uma leitura, algo como:

    int c;
    while((c = fgetc(stdin)) != '\n' && c != EOF);
  16. @devair1010 ungetc só precisa do cabeçalho stdio.h, penso que deveria funcionar em qualquer lugar.

     

    Na documentação diz:

    If the operation fails, EOF is returned.

     

    Mas não entendi o motivo de ungetc falhar naquele caso.

     

    3 minutos atrás, devair1010 disse:

    e aqui não aparece a imagem nesse link , seria melhor se você postar a imagem mesmo .

    Eu postei imagens mesmo, mas pra resumir no compilador online o retorno é 32 (caractere espaço) e no codeblocks é -1 (EOF).

  17. Na documentação da scanf está escrito:

     

    int scanf ( const char * format, ... );

    Read formatted data from stdin

    Reads data from stdin and stores them according to the parameter format into the locations pointed by the additional arguments.

    The additional arguments should point to already allocated objects of the type specified by their corresponding format specifier within the format string.

     

    O que são dados formatados?

    Eu tinha lido nesse link o seguinte:

    printf() and scanf() are examples for formatted input and output functions and getch(), getche(), getchar(), gets(), puts(), putchar() etc. are examples of unformatted input output functions.

    Não entendi muito bem o motivo, e não encontrei muito a respeito.

     

    Gostaria de saber o que são dados formatados e não-formatados, e exemplos também se possível.

     

    Grato.

  18. Em 22/03/2021 às 18:57, kgin disse:

    todas as outras funções como _flushall e _fflush_nolock são funções do windows, fugindo do padrão do C, isso que dizer que não são portáveis.

    Na documentação diz que o requisito de ambas é o cabeçalho stdio.h. São portáveis.

     

    Em 22/03/2021 às 19:50, arfneto disse:

    Pode funcionar na entrada para alguns compiladores mas pela documentação oficial isso gera comportamento indefinido

    O que é exatamente um "comportamento indefinido"? Ou de fato não há nada que descreva o comportamento indefinido de fflush(stdin)?

     

    Em 22/03/2021 às 19:50, arfneto disse:

    Se o argumento for NULL fflush() limpa os buffers de todos os fluxos abertos. TODOS.

    Mas então pode gerar comportamento indefinido, certo? Já que stdin está incluída nesse "todos".

     

    Em 22/03/2021 às 19:50, arfneto disse:

    Não se trata de somente stdout.

    Somente fluxos de saída então?

     

    Em 22/03/2021 às 19:50, arfneto disse:

    e por isso se acaso funcione na entrada em alguma implementação, como a stdio da Microsoft, acaba apagando tudo como se algo tivesse lido tudo o que tinha no buffer, por simples analogia

    E se não "funcionar"? Vai gerar comportamento indefinido?

    Tem alguma forma de prever o que vai acontecer?

     

    Em 22/03/2021 às 19:50, arfneto disse:

    acaba apagando tudo como se algo tivesse lido tudo o que tinha no buffer, por simples analogia

    Isso seria descarregar o buffer?

    Descarregar seria retirar a carga... Caso funcione para a stdin, retirar algo que tenha restado de, por exemplo, uma leitura, não seria apagar?

     

    Mais uma pergunta: como fflush se comporta quando o buffer está vazio?

    Por exemplo, caso funcione para a stdin, e o buffer esteja vazio, segundo sua analogia, a função teria que esperar algo para ler da stdin, certo? Consequentemente, o programa iria pausar, mas isso não acontece...

  19. Olá.

    Fiz o seguinte código:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char str1[101];
        int x;
    
        printf("Digite uma string:\n");
        scanf("%100[\nabcde]", str1);
        x = ungetc(' ', stdin);
        printf("ungetc retornou <%d>\n\n", x);
    
        return 0;
    }

    Testei em um compilador online e o retorno de ungetc foi esse:

    image.png.96a58e6c9e4ce559aa1140429a15c85b.png

    Mas no codeblocks aparece -1, acredito que seja EOF:

    image.png.cfb55eed1b41ff8f04d8f7c5b8212cb9.png

    Alguém saberia o motivo?

    Meu compilador é o GNU GCC Compiler.

     

    Grato.

  20. @Renato.88 @Thiago Miotto

    Errei uma coisa... Perdão.

    image.png.6b2244189d5488cab892c2a721236a71.png

    Ta... Esse seria o circuito.

     

    1 hora atrás, Thiago Miotto disse:

    Como você ligará e desligará o relé?

    Então, considerei Vz = 200Vrms pra ter uma margem de erro, que é um pouco menor que 10%.

    Coloquei o capacitor lá pro relé não ficar armando e desarmando sem parar, e então caso Vin > Vz, o switch do relé muda de posição para onde saem 220Vrms, caso contrário, permaneceria na posição onde saem 110Vrms.

     

    2 minutos atrás, Renato.88 disse:

    O relé também, terá que ter uma bobina de 110 ou 220V.

    Não teria que ter uma bobina de Vin - Vz ≥ 20Vrms?, já que o zener lá está em série.

     

    3 minutos atrás, Renato.88 disse:

    O capacitor ali realmente é necessário pois um relé de CC vai vibrar mesmo, mas perceba que a tensão de trabalho é de no mínimo 350V.

    Qual um bom valor para o capacitor? Ou como calcular?

    Eu o coloquei na posição certa ali né? Antes do zener.

  21. @Renato.88 Fiz o seguinte, poderia dar uma olhada por favor?

    image.png.036eb504cc9e59df824898ffcb17d47d.png

    Nunca mexi com relés antes, e estava aprendendo sobre zener não faz muito tempo, então não espere muito de mim :D

    Coloquei aquele capacitor meio que instintivamente, se não tivesse um lá, o relé iria ficar armando e desarmando.

    Saberia me explicar também a necessidade de um diodo entre os terminais da bobina do relé?

  22. @Renato.88 Olá novamente :D

    Se eu fizer, por exemplo:

    image.png.4046221a1f1f2a4510952d11b3a5213a.png

    seria melhor que:

    image.png.d11a5c4131aad85eb40380c545847359.png

    Sendo que a ideia é ter 5V na saída? Se sim, qual diodo que eu usaria pra ter um Vd mais próximo de 0.7V?

     

    Outra pergunta: há alguma forma de usar zener para avaliar se na entrada, que é conectada na rede elétrica, eu tenho 110 ou 220V? No caso a ideia seria retificar antes e usar o zener para acionar um relé (será feito num simulador).

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!