Ir ao conteúdo

Ansi C

Membro Pleno
  • Posts

    3.284
  • Cadastrado em

  • Última visita

posts postados por Ansi C

  1. @Samuel Fortes Brasil Olá

    Bem-vindo ao CdH!

     

    Sobre o problema, aparentimente há uma operação de divisão com divisor de valor 0; Logo, suponho, que esteja aqui.

    1 hora atrás, Samuel Fortes Brasil disse:
    valorPorParcela <- jurostotais/parcelas

     

    Não encontrei outras operações de divisão com capacidade para produzir essa mensagem de erro:

     

    Tem aqui, 100, uma variável constante e maior que 0.

    1 hora atrás, Samuel Fortes Brasil disse:
      juros <- (dinheiro * 20)/100
    

     

    Sugestão:

    Depois da leitura de `parcelas`, verifique a variável para valores maiores que 0, porque divisão com divisor de valor 0 sabemos que não podemos.

     

    Adendo:

    Analise, de fato pode uma quebra de linha fora dos limites duma string literal, desse modo.

    1 hora atrás, Samuel Fortes Brasil disse:
    Escreva(/n"Vou pagar em quantas parcelas ?")

    `/n ` é certo?

     

    Note que no final do nome da variável há um pedaço de aspas, está certo?

    2 horas atrás, Samuel Fortes Brasil disse:
    Escreva("Cada parcela terá o valor de:",valorPorParcela")
    • Obrigado 1
  2. 53 minutos atrás, devair1010 disse:

    nesse novo código que postou , se na entrada for informado "9" , só mostrará "7" e sendo que para mostrar os 9 números precisa informar "43" logo na entrada

     

    Olá @devair1010

     

    Somente isso

    É, o que é: x não representa, explicitamente, a quantia de números amigos solicitados — como aparentemente supunhas —, mas sim, x representa com os coeficientes a definição de y, sendo y um máximo de n (o amigo do amigo)

     

     

    • Obrigado 1
  3. Esse exercício é um clássico, tem aquela abordagem dos maximo, mínimo e meio:

     

    Por exemplo.

    /*
    * FÓRUM CLUBE DO HARDWARE --- CdH
    * @Ansi C
    * 2014
    */
    typedef unsigned  altura;/* Considera-se alto\baixo sempre acima do chão. */
    #include <stdio.h>/* Include the header file for input and output */
    int main (){
      altura nova= -1 ,menor= -1 ,maior= 0;
      /* Sendo 0 logicamente o chão, e -1 o céu */
    
      printf ("Entre com 5 alturas (use a Espaço ou a Enter entre elas):\n");  
      for (unsigned idx= 1 ; idx<=5 ; ++idx) {
        printf ("%c%s",'\r',">>>");
    
        nova= -1; 
        int c= scanf ("%u",&nova);
        if (c!=1 || ((int)nova)<=-1) {
        /* Ou seja, uma nova é muito abaixo do céu até o chão */
          if (c==EOF) break;
          if (c!=1) getchar ();
          idx-= 1;
          } else {
          if (maior<nova) maior= nova;
          if (menor>nova) menor= nova;
          }
        }
      printf ("%s","Resultado: \n\t");
      printf ("%s%u%s","<: ",menor,"\n\t");
      printf ("%s%u%c",">: ",maior,'\n');
      return 0;
      }

     

    Eu acho que é isso.

  4. 4 horas atrás, jaireugenio disse:

    eu programa a pouco mais de uma semana

    Eu compreendi você "assim que bati com os olhos..."

     

    Enfim,

     

    de fato, o programa produziu - para mim, somente isso bastaria. Modifiquei-o sutilmente nos nomes das variáveis com termos que considero didáticos - o programa permanece (o mesmo).

     

    /*
    * FÓRUM CLUBE DO HARDWARE --- CdH
    *
    * @jaireeugenio
    * Membro Junior
    * 2024
    */
    #include <stdio.h>
    int main (){
      int divisor ,soma ,amigo ,x= 3;
      
      scanf ("%d",&x);
      x*= (x>3)? 1500 : 1000;
    
      for (int numero= 2 ; numero<=x ; numero++) {
        amigo= 1;
        for (divisor= 2; divisor<=(numero/ 2); divisor++) {
          if ((numero% divisor)==0) amigo+= divisor; //calcula a soma dos divisores
          }
        soma= 1;
        if (amigo!=numero)
          for (divisor= 2; divisor<=(amigo/ 2); divisor++) {
            if ((amigo% divisor)==0) soma+= divisor;
            }
        if (numero==soma && numero<amigo) {
           printf("(%d,%d)\n",numero,amigo);
           }
        }
      putchar ('\n');
      return 0;
      }

     

    *Prefiro um contador à expressão x. 🙂 

     

    • Obrigado 1
  5. ... Já com leitura de 10 idades, assume-se que 10 é uma informação (nem mais, nem menos) — somente 10 satisfaz.

    /*
    * UM EXEMPLO DE LEITURA (e produz durante)
    */
    #include <stdio.h> /* Include the header file for input and output */
    #include <stdlib.h>/*     ...memory management and other algorthms */
    int main (){
      int idade;
      int count;
    
      for (count= 1 ; count<=10 ; count++) {
        printf ("%c%s%d%s",'\r',"Entre com ",count,"ª idade: ");
        count-= 1;
    
        int c= getchar ();
        if (EOF==c) break;
        if ('\n'==c) continue;
    
        ungetc (c,stdin);
    
        idade= -1;
        scanf ("%i",&idade);
        if (idade>=0) {
          if (idade>=18) printf ("%i\n",idade);
          count++;
          }
        while (EOF!=(c= getchar ()) && '\n'!=c);
        }
      putchar ('\n');
      return 0;
      }

     

    Aqui, diferentemente, a [Enter] não encerra suas 10 leituras.

    E repeito, se consegue refinar alguma coisa, então, faça-o. Para mim, ele já confere com 10 leituras.

    • Obrigado 1
  6. Portanto,

     

    #include <stdio.h> /* Include the header file for input and output */
    int main (){
        int sep= 0;
        printf("Informe \"Até\" 10 idades para o sistema:\n");
        for (int count= 1 ; count<=10 ; ) {
    
             int c= getchar ();
             if ('\n'==c || c==EOF) break;
    
             ungetc (c,stdin);
    
             int idade= -1;
             c= scanf("%d",&idade);
             if (idade>=18) {
                 printf("%c%d",sep,idade);
                 sep= ' ';
             }
             if (idade>=0) ++count;
             if (c!=1) getchar ();
        }
        putchar ('\n');
        return 0;
    }

     

    Além disso, talvez algum refinamento, aplique-os se julgas necessário, porém, para mim, ele confere com solicitar 10 idades…

     

    • Obrigado 1
  7. 1 hora atrás, arfneto disse:

    Mas tem gente que aprende com referências.

    Você quis dizer com exercícios resolvidos?

     

    Ah! Não tem não, mas essa é sua opinião e respeito.

    Apesar de discordar dela:

     

     

    Em 22/04/2024 às 09:48, devair1010 disse:

    apenas informações sobre como adquirir um para de número amigos

    Para a maioria já é o suficiente ter o como determinar 1 par - e fica como exercício expressar o 'como adquirir um par de números  ... 

     

    Especificamente, expressar com a C - sem pressa qualquer um faz essa "missão" 😄 

     

     

    1 hora atrás, arfneto disse:

    Não é complicado.

    Ai sim, eu concordo.

    • Curtir 1
    • Haha 1
  8. 11 horas atrás, arfneto disse:

    Essa função retorna a soma dos divisores de um número. Note que em C size_t é melhor que int. Não há sinal nesses números.

     

    size_t soma_div(size_t val)
    {
        size_t n_div = 1;
        size_t soma  = 1;
        // os pares a*b
        size_t div = 2;
        size_t q   = 0;
        do {
            q = val / div;
            if (q * div == val)
            {   // quadrado perfeito?
                if (q != div) soma += div;
                soma += q;
            }
            div += 1;
        } while (q >= div);
        return soma;
    }

     

     

    [OPINIÃO]

    Suponho que isso satisfará o professor, e no mínimo tirará do autor do tópico uma oportunidade de aprender algo com erros (e de qualquer outro também).

     

    Hoje em dia, considero essa categoria de postagem um atraso.

     

    Mas, solução é boa.

    • Curtir 1
  9. Em 17/04/2024 às 16:40, santicide disse:

    o sorteio manual não funcionam

    Eu entendo, e tu compreendes, que os programas são simulações\representações pouco ou quase nada perto da realidade material das coisas; logo, não existe o sorteio material, real ou manual em sistemas analógicos e digitais: há somente algoritmos.

     

    E DAÍ

    Supostamente, o exercício é algo acerca de iteração sobre vetores e números randomizados (ou qualquer coisa semelhante) que, para mim, resolve em Algoritmo de Embaralhamento.

     

    Sugiro que defina uma função que tem como argumento formal um vetor e que retorna o valor dum elemento desse vetor; bolas é um bom nome para o vetor. Antes exclua (aplique exclusão lógica) a bola sorteada de bolas.

     

    Além de retornar uma bola do vetor, aquela função aplica em bolas a cada chamada o algoritmo de embaralhamento, o que, para mim, confere razoavelmente com 'sorteio manual ': ação de agitar o saquinho de bolas e pegar uma.

     

    Acho que isso agradará teu professor! A mim, muito agradaria.

     

    ***Se essa não é a pergunta, então, desculpe-me.

     

     

    • Obrigado 1
  10. Em 14/04/2024 às 15:23, devair1010 disse:

    porém não sei se esses números encontrados pelo programa são realmente números amigos

    Abaixo, trago-lhes a lista com os 40 primeiros números amigáveis — para simples conferência.

     

    amigos.txt

    01. 220 	280
    02. 1184 	1210
    03. 2620 	2924
    04. 5020 	5564
    05. 6232 	6368
    06. 10744 	10856
    07. 12285 	14595
    08. 17296 	18416
    09. 63020 	76084
    10. 66928 	66992
    11. 67095 	71145
    12. 69615 	87633
    13. 79750 	88730
    14. 100485 	124155
    15. 122265 	139815
    16. 122368 	123152
    17. 141664 	153176
    18. 142310 	168730
    19. 171856 	176336
    20. 176272 	180848
    21. 185368 	203432
    22. 196724 	202444
    23. 280540 	365084
    24. 308620 	389924
    25. 319550 	430402
    26. 356408 	399592
    27. 437456 	455344
    28. 469028 	486178
    29. 503056 	514736
    30. 522405 	525915
    31. 600392 	669688
    32. 609928 	686072
    33. 624184 	691256
    34. 635624 	712216
    35. 643336 	652664
    36. 667964 	783556
    37. 726104 	796696
    38. 802725 	863835
    39. 879712 	901424
    40. 898216 	980984
    

     

    • Amei 1
  11. Eu concordo 👍

    Em 14/04/2024 às 15:23, devair1010 disse:

    Para esse código não repetir os mesmos números você pode colocar uma variável que armazena os números encontrados e assim evitar imprimi los novamente

     

    E, supostamente, será a partir do 10⁠º número amigável que o custo do cálculo aumentará; há outra estratégia para minuir o tempo de produção, gravar no disco (tabela.txt) os novos números gerados e servi-lo como a tabela de consulta e agilizar a produção naquela função para índices menores que os que já existem |

     

    Por exemplo

    amigos (10);/*
                 * Isto gera e grava (.txt) 10 números amigavéis
                 * e produz somente o 10o número no simulador
                 */

     

    Se chamasse a função para índices ≤ 10, sua resposta viria do arquivo (.txt). Enquanto, para índices maiores que 10, a ação é gravar no arquivo todos os números até o índice no argumento, e produzi-lo.

     

    É algo que, sem pressa, qualquer um consegue essa expressão em tempo (resposta); -- uma resposta que, para mim, é\seria das boas.

    • Obrigado 1
  12. Uma solução depende da adição (ou soma) dos divisores.

     

    Se fosse para mim, tu me satisfarias com uma função, uma que determine aquela soma.

     

    Isto abaixo tem potencial para declarar essa função.

    Em 13/04/2024 às 17:18, jaireugenio disse:
        while(n2>=div2*2){
            if(n2%div2==0){
                soma2=soma2+div2;
            }
            div2++;
        }

    ~x~

    Em 13/04/2024 às 17:18, jaireugenio disse:
    if(soma1==n2 && soma2==n1){ //neste caso sao amigos
    

    Só que não; porque há n1 == n2 ou n1>n2 e neste caso eles não são amigos ou são amigos repetidos.

     

    Suponho que uma solução seja a determinação de pares amigos, porém teu código-fonte me inspira muito mais uma checagem: checa-se n1 e n2 são amigos. Isso me parece pouco certo!

     

    Espero mais por uma determinação do amigo a partir de um argumento como ordinal.

     

    Por exemplo:

    amigos (1);/*
                * Isto produzirá 220 284,
                * o primeiro par de amigos
                */

     

    Suponho que assim teu professor ficará satisfeito — eu ficaria 🙂 

    • Curtir 1
  13. Em 18/04/2024 às 19:27, Thaianny Oliveira disse:

    No caso eu quero que ele solicite 10 idades e mostre todas >=18.

    Entendo...

     

    E será durante o prompt que produz a saída ou não? Neste caso, depois que memoriza ('bufferiza') 10 idades?

     

    Teu código-fonte, inspira-me ser durante; ou seja, ler 10 idades, e o seu enunciado não; ou seja, solicitar 10 idade(s).

     

    Há diferença entre as ações.

     

     

    Concordo👍

    Em 18/04/2024 às 20:41, devair1010 disse:

    outro modo mais elaborado seria usar um vetor para armazenar

    Supostamente, se há vetores no apontamento, então esse é o modo.

    • Curtir 1
    • Obrigado 1
  14. @devair1010 organização e compartilhamento.

     

    Organização

    Aos iniciantes, quase sempre, inspira-se depositar declarações neste tipo. Vê-se, pelo menos, assim um para:

     

    Declaração de tipos

                      ... macros

                     ... funções

      ... variáveis globais

     

    coisas comuns com compartilhamento no projeto.

    • Obrigado 1
  15. @ignite137 Olá.

     

    Para expressar o PROCESSAMENTO com C, é requisito uma expressão com matemática.

     

     

    Semelhante o que já foi dito, a partir da informação de entrada determine a área da superfície total da caixa em metros quadrados (At m²): sendo a soma da área da superfície das 6 faces.

     

    At = 2xy + 2xz + 2yz

     

     

    Em seguida, suponha cada razão do enunciado. Sendo a primeira a quantidade de tinta total para o serviço, uma razão de um metro quadrado por 3 litros de tinta (1 m²/3l).

     

    At m²/(1 m²/3 l)

    › (At m² • 3 l) /m²

    › 3At litro(s)

     

    *Suponho a quantidade de tinta sendo o produto da área da superfícies por 3.

     

    Em seguida, para cada 10 metros quadrados é necessário um novo rolo de tinta que custa R$ 5,00 (10 m²/5 r › 2 m² /real)

     

    At m²/(2 m²/real)

    › (At m² • real) /2 m²

    › ½At real

     

    *Suponho o custo com rolos sendo a metade da área da superfícies.

     

    continua...

     

    • Obrigado 1
  16. 14 horas atrás, devair1010 disse:

    @mauro_b    sim , realmente ,  creio que nunca haverá erro nesse caso , pois o último caractere sempre será o '\n' , já que a tecla "Enter" é que finaliza as entradas .

    Claro, e qual é probabilidade de erro nessa situação? Dum erro que é quase inexistente.

     

    Entretanto,

    culturalmente essa expressão vem com mais uma sentença -- c != EOF

    Ex.

    /*Um discarte mais seguro da linha*/
    
    
    int c = 0;
    //isso declara a palavra auxiliar no discarte */
    
    while (c != '\n' && c != EOF)
    /*isso expressa um discarte mais seguro da linha (por ciclo)
    enquanto a palavra diferir de 'ENTER' e EOF */
            c = getchar ();
            //isso pega uma palavra (int) na linha 

     

    É mais ou menos assim que os manuais expressão essas coisas, né? Para lógica não faz diferença, não é erro, com ou sem o tratamento.

    • Obrigado 1
  17. Erros Internos associados ao fluxo (Input/Output)

    nos são irrelevantes na compreensão da Lógica, é por esse motivo que, consideramos certas as expressões de @Midori @devair1010  

     

    Checar os estados dos fluxos padrões, por exemplo, com uso da função 'ferror', pouco ou quase nada adicionará as suas lógicas / expressões.

     

    Sendo mais didático, por exemplo: no caso da expressão do @Midori há pequeníssima possibilidade de ficarmos presos num laço infinito, bem ali, na expressão que nos aponta um descarregar do fluxo de entrada (padrão):

    while(getchar() != '\n');

     

    # Um tratamento de erro

    while (getchar () != '\n' && ferror (stdin) == 0)
    	;

     

    Se, potencialmente, a getchar indicasse erro, veríamos o laço sem fim; apesar de tratável, o tratamento é irrelevante na compreensão dessa expressão, de sua lógica e entendimento.

    • Obrigado 1
  18. @Diego M. Santos Olá!

     

    Estou iniciante nesse assunto (ainda). Parece-nos sinistra a inter-relação.

    Em 26/02/2024 às 10:05, Diego M. Santos disse:

    ao usar comando "ng", até mesmo para ver a versão, ele sempre abre Visual Studio Code dizendo sobre update

     

     

    Porque entendemos, o primeiro sendo uma CLI e outro um Editor (supostamente) independentes.

    Logo, o que acontece se ousássemos instalar (Angular/CLI) a Interface de Linha de Comando do Angular e expressássemos diretamente duma Shell: ng --help, antes de instalar o VSCode

    • Curtir 1
  19. @clara leal , Olá (outra vez), por motivos didáticos acrescentarei a mensagem (exemplificação) que, talvez, reforça a percepção de que o cerne não são os números inteiros (Z), porém -especificamente- os positivos (Z+).

     

     

    C'11 in GCC

    /* main.c --- Uma exemplificação duma variável de controle
        
        
        @ESPECIFICAÇÃO
         Exemplificação e verificação de user-prompt da informação
        
         [#] Agora para continuar com essa operação,
         diga-nos A QUANTIA de fichas Cliente"s no cadastramento.
        
         (0 = anulará operação)? 
        
        @BUGs
        Caso falhem -especificamente- na informação (digitação),
        imprima-se:
        
         [!] erro--- quantia inválida.
         *sendo 'erro' aquela string faltosa.
        
         e repetir.
        
        
        @EXPRESSÃO
         C'11 into GCC 5.2.0 ***
         by Mauro B.
         2024-2 v2 */
    
    #include <stdio.h>
    
    
    int main (void) {
    
    
        int nfichas = (-1); /* sendo quantia de f- Cliente no cadastramento */
        char prompt [BUFSIZ]; /* sendo mediador de tipos no cadastramento */
        
        
        /* Como na interação user-prompt ... */
        printf ("%s", "[#] Agora para continuar com essa operação,\n"
         "diga-nos A QUANTIA de fichas Cliente's para cadastramento.\n"
         "\n");
        
        
        for (;
            printf ("%s", "(0 = anulará operação)? "),
            fgets (prompt, BUFSIZ - 1, stdin),
            sscanf (prompt, " %i", &nfichas),
            (nfichas <= 0)
            ;)
            
            if (nfichas) /* SE difere do 0 */
                printf ("[!] %s--- quantia inválida.\n"
                 "Dê-me quantia >= 0.\n\n", prompt);
                
            else /* SE 0 */
                return (-1); /* retonar status FAILURE */
        
        
        printf ("%s%d%s", "[#] Informou-nos A QUANTIA de: ", nfichas, " fichas.\n"
         "\n");
        
        
        return (0);
    }   /* retornar status SUCCESS */

     

     

    Ilustração in MS Windows

    image.png.564dea4438668f076ddf43ae081a3c0e.png

     

     

    — Numa situação de uso comum, hipoteticamente, o laço encerra na informação de inteiro positivo ou 0 encerra.

    Entendeu-me nessa lógica /expressão ?

     

    • Obrigado 1
  20. 6 horas atrás, arfneto disse:

    É válido programar assim, mas provavelmente não faria bem para sua nota ou seu emprego. E nem para quem viesse depois de você trabalhar com esse tipo de programa. Ou mesmo para você daqui uma semana.

     

    De todo modo está errado.

    Se diz provavelmente, então prove...

    Contudo, tuas opiniões (comentário mínimo) talvez ajude outro alguém… (senão tanto faz)

     

     

    6 horas atrás, arfneto disse:

    não precisa do comentário "Se difere do 0". Mas se vai colocar o comentário é muito mais simples usar o óbvio

    Devemos e podemos COMENTAR TUDO.; até expressões simples e quem diz o contrário, quase sempre tem pouco ou quase nenhuma autoridade.

    Se estou errado, prove!

     

    Ex:

    c = a + b;
    /*c sendo soma de a e b */

     

    c = a + b; /*c sendo soma de a e b */

    — Excelentes Programadores \ professores \ tutores \ iniciantes com um pouco de experiência e até mesmo IA sabem ignorar esses comentários, independentemente de que os escreveu.

     

     

    De todo modo, agradeço à tentativa!

    • Obrigado 1
  21. Olá!

    Em 21/02/2024 às 13:02, clara leal disse:

    Quero fazer uma comparação de enquanto o numero de clientes não for um inteiro retorne sempre para o printf("Quantos clientes deseja cadastrar")

        Suponho haver semelhança entre o queres e o que necessitas.
        
        Portanto…
        Há necessidade (duma informação), sendo ela um elemento no
        conjuntos dos números inteiros positivos (Z+).
        
        Daí…
        Essa analise superficial foca numa variável de controle,
        porque, interessa-nos, talvez, o valor nela e não noutra.
        
        Logo…
        Parafraseando-se tua indagação, mais exemplo de interação
        num caso de uso comum; expressamos o código-fonte assim:

     

     

    C'11 in GCC

    /* main.c --- Uma exemplificação duma variável de controle
        
        
        @ESPECIFICAÇÃO
         Exemplificação e verificação de user-prompt da informação
        
         [#] Agora para continuar com essa operação,
         diga-nos A QUANTIA de fichas Cliente"s no cadastramento.
        
         (0 = anulará operação)? 
        
        '''BUGs:
        Caso falhem -especificamente- na informação (digitação),
        imprima-se:
        
         [!] erro--- quantia inválida.
         *sendo 'erro' aquela string faltosa.
        
         e repetir.
        
        
        @EXPRESSÃO
         C'11 into GCC 5.2.0 ***
         by Mauro B.
         2024-2 */
    
    #include <stdio.h>
    
    
    int main(void) {
    
        int nfichas = (-1); /* sendo quantia de f- Cliente no cadastramento */
        char prompt [BUFSIZ]; /* sendo mediador de tipos no cadastramento */
        
        
        /* Como na interação user-prompt ... */
        printf ("%s", "[#] Agora para continuar com essa operação,\n"
         "diga-nos A QUANTIA de fichas Cliente's para cadastramento.\n\n");
        
        
        for (;
            printf ("%s", "(0 = anulará operação)? "),
            fgets (prompt, BUFSIZ - 1, stdin),
            sscanf (prompt, " %i", &nfichas),
            (nfichas <= 0)
            ;)
            
            if (nfichas) /* SE difere do 0 */
                printf ("[!] %s--- quantia inválida.\n"
                 "Dê-me quantia >= 0.\n\n", prompt),
                prompt [0] = '\0';
                
            else /* SE 0 */
                return (-1); /* retonar status FAILURE */
        
        
        return 0;
    }   /* retornar status SUCCESS */

     

     

    Ilustração no MS Windows

    image.png.37e576c2cc7a109da02f31f3371788c0.png

     

     

    — Note a expressão / sentença para inteiro positivo (Z+) ou zero, onde qualquer diferente, hipoteticamente, será FALHA e continuará no seu laço.

    Isso talvez inspire uma expressão para o teu problema @clara leal

    • Obrigado 1

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!