Ir para conteúdo
Fórum Script Brasil

britivaldo

Membros
  • Total de itens

    199
  • Registro em

  • Última visita

Posts postados por britivaldo

  1. Olá, então percebo primeiro que variável ope não é declarada array!

    7 horas atrás, FEBRAZ disse:

    char ope;

    Por consequência, a função de leitura/gravação extrapola o limite da variável.

    7 horas atrás, FEBRAZ disse:

    scanf("%s",&ope);

     

    Veja o exemplo:

       /* OPERADOR
        * Solicitar informacao no formato caractere */
        printf("%s", "\nDigite operador [A - Adic M - Mult] > ");
    
          /* ler-gravar na memoria o valor 1 caractere */
          int ok_operador = scanf(" %c", &operador);
          assert(("Falha ao gravar operador.", ok_operador == 1));

    Observe a strings de formato no primeiro argumento da função scanf (" %c", …), quando escrito assim, os processos ignoram caracteres não gráficos (espaço branco, nova linha, etc.) e grava o caractere seguinte.

     

    — Uma interpretação do exercício sugere que o programa continua solicitação de informações (números e operadores) enquanto o acumulo dos resultados é menor ou igual a 10000.0; entende-se que tudo processo está em um bloco de loop, exceto a printf que exibirá a quantidade de operações antes de acumular 10000.0;

    Ex.:

    #include <stdio.h>
    #include <assert.h>
    
    /* Exercício
     *
     * Fonte
     *  Autor: @FEBRAZ Forum SCRIPT BRASIL
     *         https://forum.scriptbrasil.com.br/topic/218153-
     *               algu%C3%A9m-pode-me-ajudar-com-script-a-seguir/
     */
    
    int main(int argc, char *argv[]) {
    
      float numero1 = 0.f,
            numero2 = 0.f,
            resultados = 0.f;
      char  operador = 0;
      int   qtd_operacoes = 0;
    
      do
      {
        
       // Entradas e o processamento [operacoeso e contagem ] ficam aqui
       /* NUMERO 1
        * solicitar informacao no formato numerico e flutuante */
        
    
          /* ler-gravar na memoria o valor real do usuario */
        
    
    
    
       /* NUMERO 2
        * solicitar informacao no formato numerico flutuante */
        printf("%s", "\nDigite numero real [ex.: 3.44] > ");
    
          /* ler-gravar na memoria o valor real do usuario */
        
    
    
    
       /* OPERADOR
        * solicitar informacao no formato caractere */
        
    
          /* ler-gravar na memoria o valor 1 caractere do usuario */
    
    
        
        
       /* PROCESSAMENTO
        * Acumular resultados enquanto menor ou igual 10000.0 */
    
        
      }
      while (resultados <= 10000.0f);
    
    
      /* INFORMACAO
       * Exibir a quantidade de operacoes relalizadas */
      printf("%s%d", "\n#Total de operacoes realizadas: ",
      qtd_operacoes);
      return(0);
    }
    //Fim do Programa

     

  2. Em 21/09/2023 em 11:36, ApocryphA Official disse:

    quantas vezes o logaritmando que o usuario digitou na entrada pode ser divisível por 2, ou por 3 (dependendo do número).

    Para excluir dúvidas, sugiro dar, pelo menos, um exemplo ou ilustração dessa situação, porque aparenta trivial; confunde-se com quociente [inteiro].

  3. Olá! @marimariiii, em "\nlapis %12.2f", os números depois de % dizem para escrever no máximo sua saída numérica com 12 caracteres e reservar 2 destes na apresentação para fração de decimais, com tudo à direita. Por exemplo: O número 10 apresentará        10,00; número 12,234390 apresentará        12,23.

    C'11

    #include <stdio.h>
    
    int main() {
        printf("Exemplo~");
        
        double doub = 0.0;
        scanf("%lf",&doub);
        printf("|%12.2f|",doub);
        
        return 0;
    }

     

  4. Olá, @4ng3lo:

    Geralmente acontece quando se proíbe o software grava/lê segmentos de memória que não lhes pertence.

    C.:

    int buscarProduto(Produto* produtos, const char* nome_Produto){
        int encontrado = 0;
    
        while(produtos != NULL){ /*-[!] Seguido pela programação de cadastro para produtos, 
        o arranjo produtos não garante o produto nulo. Enquanto irregularmente continua até uma falha-*/
            if(strcmp((produtos)->nome, nome_Produto)){
    
            }else{
                encontrado = 1;
                break;
            }
    
            produtos++;
        }
    
        return encontrado;
    }

     

    5 horas atrás, 4ng3lo disse:
    Produto retornarProduto(Produto* produtos, const char *nomeProduto){
        Produto produto;
    
        while(produtos != NULL){
            if(buscarProduto(produtos, nomeProduto)){
                produto = *(produtos);
            }
    
            produtos++;
        }
    
        return produto;
    }

    — Siga o raciocínio: A exceção é o parâmetro nulo (endereço 0), isto é, para valores diferentes de 0 seu laço 'while' continua até uma falha, porque nunca será = 'null'. Suponho que, confundiu-se entre duas estratégias de listar dados [os arranjos e os nós]; sendo didático, escolha arranjos [vetores] e efetue (você mesmo) a correção na programação.  

  5. Olá, @gustavoibiapinafh

    Note em tua função que, os argumentos são respectivamente um destino para os dados [*buffer] e quantidade de bytes que suportam no destino ['lenght'].

    18 horas atrás, gustavoibiapinafh disse:
    void ler_texto(char *buffer, int length) {
      	fgets(buffer, length, stdin);
      	strtok(buffer, "\n");
    	}

    — Quando invocar essa função atribua parâmetros correspondentes aos tipos dos parâmetros na função.

    C.: Não compara literais strings diretamente/declaradamente. 

    char escala[50];
    double fahrenheit, celsius;
    
    printf("Voce vai digitar a temperatura em qual escala(C/F)?: ");
    ler_texto(escala, sizeof escala); /*-[!] Fiz correção de parametros-*/
    
    /*-[!]
      if ("escala = "F"){
      Impossivel declaradamente comparar strings, usa-se uma função na biblioteca string.h
      -*/
    if () {
      printf("Digite a temperatura: ");
      scanf("%lf", &fahrenheit);
      celsius = (fahrenheit - 32) / 1.8;
      
      printf("Temperatura equivalente em celsius: %.2f", celsius);
      }

    Sendo didático, elabore (você mesmo) tua correção.

  6. Ola tudo bem, espero que esteja bem. 

    Então, é difícil associar a construção/código acima com o que diz o enunciado. Para responder a questão é necessário observar/ler:

    função rand da biblioteca stdlib.h

    função com algoritmo de ordenação, recomendo insert sort porque é um fácil de implementar.

  7. SETLOCALE

    Olá, tudo bem? Espero que esteja bem. A função setlocale mais os argumentos LC_ALL, 'Portuguese' alteram os padrões C, em específico, o formato do dado real (flutuante ou dobro). Antes de chamar a função considera o (.) ponto o seu separador de inteiro e fração após chamada passa a considerar (,) vírgula.

    Veja

    image.png.f32e08592d796f14052cb390efc24ce6.png

    Então

    Essa mudança, no entanto, tem efeito somente para os inputs|outputs. Isso é, a sintaxe c permanece com separação padrão: por (.) ponto.

    Exemplo

    #include"stdio.h"
    #include"locale.h" //setlocale LC_ALL localeconv struct lconv
    int
    main(void){
      // Demonstracao dos efeitos na entrada com uso da funcao selocale com os argumentos
      // LC_ALL e "Portuguese"
      struct lconv * pattern = localeconv();
      printf("Entre com valor real(d%sdd)\n",pattern->decimal_point);
      double valor0 = 0.0; scanf("%lf",&valor0); printf("Valor0: %f\n",valor0);
    
      puts(setlocale(LC_ALL,"pt_BR.UTF-8"));
      // altera os padroes c para Portuguese
    
      pattern = localeconv();
      printf("Entre com valor real(d%sdd)\n",pattern->decimal_point);
      double valor1 = 0.0; scanf("%lf",&valor1); printf("Valor1: %f\n",valor1);
    
      puts("Fim da demonstracao");
      return 0;
      }

    Se reler a documentação dessa função terá mais informações para determinar a melhor solução do problema.

    🙂 

  8. Olá, refatore|use o operador condicional (ternário), pois não existem mudanças de fluxo e sim seleção de valor padrão.

    Veja:

    #include"iostream"
    using namespace std;
    int
    main(void){
      int codigo;
      cout<<"Digite o codigo dos produto:\n";
      cin>>codigo;
    
      int qtd;
      cout<<"Digite a quantidade comprada:\n";
      cin>>qtd;
    
      double valor = (codigo==1001) ? 5.32:
      		 (codigo==1324) ? 6.45:
    		 (codigo==6548) ? 2.37:
    		 (codigo==1987) ? 5.32:
    		 (codigo==7623) ? 6.45:0.00;
      if(valor>0.00){
    	cout<<"Total: $"<<valor*qtd<<endl;
    	}
      else{
    	cout<<"Error!"<<endl;
    	}
      return 0;
      }

    Se nenhum dos códigos na instrução ternária resultar VERDADEIRO, o valor 0.00 será atribuído à total. Em seguida uma verificação de total: a instrução decide que valor não positivo é um Error! 

    🙂

  9. Olá, tudo bem? Seja bem-vindo ao fórum! Para auxiliar a discussão na melhor forma, descrevas seu objetivo, exponhas quais eram|são as etapas|rotinas|operações do programa e os valores ideais de entrada e a saída.

     

    Caso seja um exercício, compartilhas 'print screen' do enunciado, descrevas as etapas para solução ou assunto estudado.

  10. @Yumeiro TheoryTudo bem! Espero que esteja bem.

    Sua dúvida é escrever os tipos em 'struct'? Soou estranho porque a princípio e algo fácil, já para a categoria de dado abstrato precisará das operações na forma de funções. 

    {C}

    typedef struct _dupla{
      union {float r, x;};
      union {float a, y;};
    } Dupla,
      Polar,
      Cartesiano;
    
    Dupla get_dupla (char *mensagem);
    Cartesiano converta_polar (Dupla p);
    #include"string.h"
    #include"math.h"
    #include"stdio.h"
    int
    main (void) {
      Polar pol = get_dupla ("Entre com as coordenadas polares: ");
      Cartesiano car = converta_polar (pol);
    
      printf ("Coordenadas cartesianas: (%.2f, %.2f)\n", car.x, car.y);
      printf ("Coordenadas Polares ...: (%.2f, %.2fπ)\n", pol.r, pol.a);
      return 0;
      }
    Cartesiano
    converta_polar (Dupla p) {
      Cartesiano c;
      c.x = p.r * cos(p.a);
      c.y = p.r * sin(p.a);
      return c;
      }
    Dupla
    get_dupla (char *mensagem) {
      struct _dupla ret;
      printf ("%s", mensagem);
      (void) scanf ("%f%f", &ret.x, &ret.y);
      return ret;
      }

    No caso a função de conversão; 

    image.png.094dd13ca6af78121ee24e1c85e29470.png

  11. Bem-vindo @Hacker_em_treinamento

    Nota-se alguns erros lógicos e outras elementos.

    #1

    int lucro_energetico(int s, int x, int n){
        int c=0;
        int c2=0;
        int y=0;
        int t=0;
        int t2=0;
        int m=0;
        int xc=0;
    
        scanf("%d", &n);
        scanf("%d", &x);
      ...

    As variáveis  x e n são parâmetros na função; é logicamente errado sobrescrever seus dados.

    #2

    if () {
       printf("Reacao não finalizada %d\n", x);
    }

    Nessa instrução de fluxo de controle falta a expressão na condição.

    e.g.

    if (condition) {
       /*code block*/
    }

     

    #3

     for (; c == n;) {
         if (x >= t) {
            printf("Reacao finalizada: %d\n", x);
            break;
         }
    }

    Em tese... se c é igual a n, x é menor que t; terá um ‘loop’ infinito. Pense no porque disso!

     

    Acredito que com uma boa revisão da linguagem e do problema, resolverá numa próxima tentativa.

    [🙂] — espero que ajude. 

  12. Ola!

    Quase lá! Só um detalhe..., que você mesmo tente descobrir qual. Para isso, observe o fragmento abaixo escolha a alternativa certa e atualize o ninho de ‘loop’.

       /* Ate aqui atendeu suficientemente bem a questão
        | Demostrou compreender bem a transposta de A e sabe que:
        | 
        | t-linhas  = A-colunas  (col)
        | t-colunas = A-linhas   (lin)
        |  Agora...
        |  X Qual a ordem dos limites dos índices da transposta (t) ?
        | a)[ ] i < lin e j < col
        | b)[ ] i < col e j < lin
        */
       printf("\nElementos da matriz transporta:\n");
       for (i = 0;/*complete*/;  i++) {
           for (j = 0;/*complete*/;  j++) {
               printf (" %.2f ", t[i][j]);
           }
           printf ("\n");
       }

    [🙂] — Ajudou? 

  13. Olá @Bruno Nery

    Além dos projetos acima, existem outros caminhos análogas que usam uma variável estática para contar a quantidade de linhas. É possível também escrever outra função recursiva que chamaria a primeira e, assim, definir as linhas de gráfico. 

     

    Exemplo

    — Aqui eu uso o primeiro caso, uma função recursiva que empilha cópias de si mesma n vezes para depois executar a sua segunda etapa de n por n;  ou as linhas de gráfico

    C Language /> _

    #include"stdio.h"
    void
    print_graph (int n) {
      static int times = 1;
      if (times) {
         if (n > 0)
            print_graph (n - 1);
         
         else
            return;
    
         times = 0; //desliga a pilhagem
        //basicamente -- empinha as linhas de grafico
        //equivalente à chamar a função print_graph (n,...,1)
      }
      if (n > 0) {
         printf ("*");
         print_graph (n - 1);
      }
      else 
         printf ("\n");
    
      times = 1; // religa pilhagem.
      return;
    }
    int
    main (void) {
      print_graph (5);
      // escrever ...
      return 0;
    }

    [🙂] — Entendeu? 

  14. Olá!

    Eu falei! É muita mais fácil e produtivo falar o que certou do que gastar minutos / horas concentrado no que errou. Além disso, visto que destaquei o que está certo tudo que sobrou está errado.

     

    — A única porção de código com uma intenção/lógica visível é a rotina que faz cópia invertidamente da entrada, pois de tudo escreveu somente essa parte da lógica indica uma solução; comparar a cópia invertida com a entrada e se forem iguais é palíndromo.

     

    [🙂] Ficou claro? 

×
×
  • Criar Novo...