Ir para conteúdo
Fórum Script Brasil

Durub

Moderadores
  • Total de itens

    788
  • Registro em

  • Última visita

Posts postados por Durub

  1. E quais as dúvidas, exatamente?

    O fluxo seria o seguinte:

    1. Criar e testar a função de fatorial
    2. Declarar o vetor A
    3. Declarar o vetor B
    4. Ler 10 números no vetor A
    5. Fazer um for pra executar a função fatorial em cada elemento do vetor A e colocar no vetor B.
    Basicamente:

    B[i] = fatorial(A[i]);

    6. Imprimir o vetor A
    7. Imprimir o vetor B

    Qual parte está te causando as maiores dificuldades e por quê?

  2. brunoandrad, ele só começa a contar errado quando estoura o limite que um int consegue armazenar -- converter para char sofreria do mesmo problema.

    O número 777777777 contém 9 dígitos iguais a 7.

    O número -812156815 contém 0 dígitos iguais a 7. (com 10 digitos 7)

    O valor máximo de um inteiro (int) é 2.147.483.647 (daí vem a "restrição" dos 9 dígitos). Experimente trocar int para long long e veja o que acontece:

    #include <stdio.h>
    #include <math.h>
    
    int main() {
        long long num, teste_num; /* número a ser testado */
        long long ordem_de_magnitude; /* ordem de magnitude do número num */
        int i;
        int quantidade = 0; /* quantidade de dígitos igual a 7 */
    
        printf("Digite um numero: ");
        scanf("%lld", &num);
    
        ordem_de_magnitude = (int) log10(num);
        teste_num = num;
        for(i = ordem_de_magnitude; i >= 0; i--) {
            long long multiplicador = pow(10, i);
            int digito = teste_num / multiplicador;
            teste_num -= digito * multiplicador;
    
            if (digito == 7) {
                quantidade++;
            }
        }
    
        printf("O número %lld contém %d dígitos iguais a 7.\n", num, quantidade);
    
        return 0;
    }
    

    Digite um numero: 7777777777777777777
    O número 7777777777777777777 contém 19 dígitos iguais a 7.

    long long consegue contar até 19 dígitos.

    Abraços!

     

  3. Aqui está uma forma -- note que o loop vai de "cima para baixo", de forma a ir modificando o número (teste_num), removendo a casa mais significativa a cada passo:

    1234 -> vira 234 -> vira 34 -> vira 4. Sempre pega o dígito mais significativo do teste_num atual.
     

    #include <stdio.h>
    #include <math.h>
    
    int main() {
        int num, teste_num; /* número a ser testado */
        int ordem_de_magnitude; /* ordem de magnitude do número num */
        int i;
        int quantidade = 0; /* quantidade de dígitos igual a 7 */
    
        printf("Digite um numero: ");
        scanf("%d", &num);
    
        ordem_de_magnitude = (int) log10(num);
        teste_num = num;
        for(i = ordem_de_magnitude; i >= 0; i--) {
            int digito = teste_num / pow(10, i);
            teste_num -= digito * pow(10, i);
    
            if(digito == 7) {
                quantidade++;
            }
        }
    
        printf("O número %d contém %d dígitos iguais a 7.\n", num, quantidade);
    
        return 0;
    }

    Abraços.

  4. Minha tentativa:

    #include <stdio.h>
    
    int main() {
        int cateto1, cateto2, hipotenusa;
    
        for(hipotenusa = 1; hipotenusa < 500; hipotenusa++) {
            for(cateto1 = 1; cateto1 < 500; cateto1++) {
                for(cateto2 = 1; cateto2 < 500; cateto2++) {
                    int esquerdo = cateto1 * cateto1 + cateto2 * cateto2;
                    int direito = hipotenusa * hipotenusa;
    
                    if(esquerdo == direito) {
                        printf("São números de pitágoras: %d - %d - %d\n", hipotenusa, cateto1, cateto2);
                    } else if(esquerdo > direito) {
                    /* otimização de performance -- não haverão mais números válidos quando o lado esquerdo é maior que o direito */
                        break;
                    }
                }
            }
        }
    
        return 0;
    }

    Abraços!

  5. Falta passar os índices corretos para o vetor gab.

    &gab[i] ao invés de apenas &gab e gab[i] ao invés de apenas gab, para acessar o valor na posição i do vetor.

    Mesma coisa com o vetor alu.

    Edit: acho que o sistema do fórum comeu o índice, na verdade. Tente postar o código em um bloco de código do fórum. Como assim os resultados estão errados -- o que está acontecendo, exatamente?

    Abraços.

  6. Sobre o Eclipse, não consigo responder.

    Pela imagem anexada sobre o CodeBlocks, a solução é apertar "Sim". O que ocorre após confirmar que o arquivo deve ser compilado (Do you want to build it now? -> Deseja compilá-lo agora?)?
    É o seguinte: para rodar um programa, ele deve existir, correto? Não há como rodar algo que não exista. Por enquanto, apenas existe o seu código (Untitled1.c). Não existe o programa equivalente (Untitled1.exe). O CodeBlocks avisa isso: parece que o programa ainda não foi compilado, deseja compilá-lo agora? Ou seja, deseja realizar a "transformação" do seu código em algo executável (Untitled1.c -> Untitled1.exe)? Após a compilação ter sido efetuada com sucesso, é para ser possível rodar o programa pela IDE sem problemas.

    Abraços.

  7. A diferença é que se tiver uma linha mal formada, o programa continua sem problemas. Lendo uma linha por vez, caso a linha contenha problemas, a entrada continua ok para a próxima linha. Todavia, ainda é bom disparar um erro. Pode-se verificar quantos dados o sscanf leu com seu valor de retorno. Se ele for diferente de 5, um erro de leitura ocorreu.

    O sscanf deverá estar em um loop, onde os dados são lidos e armazenados corretamente de acordo com a semana. Recomendo utilizar arrays (vetores) para fazer isso.

    Abraços.

  8. Para abrir arquivos, utilize a função fopen. Para ler linha por linha do arquivo, utilize a função fgets, da stdio.h (ver primeiro exemplo).

    Para ler uma linha em especifico, utilize sscanf:
     

     sscanf(linha, "%d %d %d %d %d", &semana, &dia, &hora, &carros, &motos, &caminhoes);

    Onde semana, dia, hora, carros, motos e caminhoes são inteiros. O resto da lógica e análise, por enquanto, fica por você. Quando começar a trabalhar em cima do problema e enfrente alguma dúvida mais específica em relação a lógica, venha falar conosco!

    Abraços.

  9. a[x] pode ser 12, a[y] também pode ser 12, depende dos valores de x ou y. Quando x = 0, a[x] é 12. Quando y = 0, a[y] é 12.

    Veja como o array é imprimido no código:

    for (i=0; i < MAX; i++)
        printf("%d\n",a[i]);

    O que significa (tive que deixar separado em um bloco de código devido a formatação do fórum)

    a[i]

    ? Significa acessar a posição i do array e retornar o seu valor. É a mesma coisa com a[x] e a[y].

    int a[5];
    
    a[0] = 12;
    a[1] = 9;
    a[2] = 14;
    a[3] = 5;
    a[4] = 1;
    
    // Imprime: "12 9 14 5 1"
    printf("%d %d %d %d %d\n", a[0], a[1], a[2], a[3], a[4]);
    
    // Também imprime: "12 9 14 5 1"
    int y = 0;
    printf("%d %d %d %d %d\n", a[y], a[y + 1], a[y + 2], a[y + 3], a[y + 4]);
    
    /* Por quê?
    a[y] = a[0] = 12
    a[y + 1] = a[1] = 9
    a[y + 2] = a[2] = 14
    a[y + 3] = a[3] = 5
    a[y + 4] = a[4] = 1 */
    

    Quando y = 0:
    a[y] > a[y + 1]
    a[0] > a[0 + 1]
    a[0] > a[1]
    12 > 9 (verdadeiro, logo entra no if)

    Parece, para mim, que a dificuldade está em entender qual o valor retornado por a[y + c], sendo c, nesse caso, 1.
    a[y + c] não é a[y] + a[c], é a[(y + c)].

    Abraços.

  10. Por que a[y] jamais seria maior que a[y + 1]? y jamais será maior que (y + 1). Entretanto, a[y] pode muito bem ser maior que a[y + 1].

    a[x] significa acessar o valor na posição x (as posições começam em zero) do array. Logo, a[0] acessa a primeira posição do array -- a posição zero.

    Array do exercício:
     

    int a[5];
    
    a[0] = 12;
    a[1] = 9;
    a[2] = 14;
    a[3] = 5;
    a[4] = 1;

    Suponha y = 0:
    a[y] -> 12
    a[y + 1] -> 9
    Logo, a[y] > a[y + 1] quando y = 0. O mesmo é válido para y = 2 e y = 3.

    Abraços.

×
×
  • Criar Novo...