Ir para conteúdo
Fórum Script Brasil

vega

Membros
  • Total de itens

    22
  • Registro em

  • Última visita

Posts postados por vega

  1. Você está no Linux?

    Instalou o pacote ou apenas copiou o header fjfx.h?

    Se tiver instalado, deve ser questão de informar -lfjfx na linha de comando.

    Além disso, você deverá substituir #include "fjfx.h" por #include <fjfx.h>

  2. Colega vega, os códigos postados pelo colega roccoC/C++ são códigos funcionais, prontos.

    Pelo que entendi, ele posta como exemplo. Provavelmente para pesquisas futuras de outros usuários, ou até mesmo pra ele.

    O título é sempre em caixa alta, pra diferenciar.

    Exatamente.

    Como acho esses tópicos interessantes, costumo participar também. Postando outra solução como alternativa.

  3. Segue o código.

    #include <stdio.h>
    #include <stdlib.h>
    
    #define OP_PRIMO 1
    #define OP_NAO_PRIMO 2
    
    int primo(int);
    void imprime(int, int, int);
    
    int main(void){
        int ini, fim, op;
    
        printf("\nIMPRIME\n\n1)Primo\n2)não Primo\n\n : ");
        scanf("%d", &op);
    
        if(op != OP_PRIMO &&  op != OP_NAO_PRIMO){
            printf("Programa encerrado\n");
            exit(0);
        }
        
        printf("Valor inicial: ");
        scanf("%d", &ini);
        printf("Valor final: ");
        scanf("%d", &fim);
        printf("\n");
    
        imprime(ini, fim, op);
        
        return 0;
    }
    
    void imprime(int ini, int fim, int op){
        register int i, qtd = 0;
    
        for(i = !ini ? 1 : ini; i <= fim; ++i)      
            if(op == OP_PRIMO){
                if(primo(i)){
                    printf("%d ", i);
                    ++qtd;
                }
            }else{
                if(!primo(i)){
                    printf("%d ", i);
                    ++qtd;
                }
            }
                  
        printf("\n\nOcorrencias: %d\n\n", qtd);
    }
    
    int primo(int num){
        register int i;
        
        if (num < 2)
            return 0;
    
        for(i = 2; i <= num; ++i)    
            if(!(num % i) && i != num)
               return 0;
    
        return 1;
    }

  4. Vou postar o programa que eu postei em outro fórum com algumas alterações e o acréscimo do bubble sort.

    #include <stdio.h>
    #include <stdlib.h>
    
    int **tabela_matriz(unsigned int, unsigned int);
    void deleta_matriz(int**, unsigned int);
    void ordena(int*, int);
    
    int main(void){
        unsigned int i, n, max, tamanho, colunas = 2, aux = 0;
        int **matriz, *vetor, repete = 0;
    
        printf("Quantos numeros deseja processar: ");
        scanf("%d", &max);
            
        vetor = (int*)malloc(max * sizeof(int));
    
        for(i = 0; i < max; ++i){
            printf("Entre com o numero (-1 para sair) #%d ", i + 1);
            scanf("%d", &vetor[i]); 
            if (vetor[i] == -1)
                break;
        }
        
        tamanho = (i + 1) != max ? i : max;
        ordena(vetor, tamanho);
        matriz = tabela_matriz(tamanho, colunas);  
      
        for(i = 0; i < tamanho; ++i){
            for(n = 0; n <= i; ++n)
                if(matriz[n][0] == vetor[i]){  
                    ++matriz[n][1];
                    repete = 1;
                }
           
            if(!repete){
                matriz[aux][0] = vetor[i];
                ++matriz[aux][1];  
                ++aux;
            }
            repete = 0;
        }
    
        for(i = 0; i < aux; ++i)
            printf("Numero: %3d | Repete: %2d\n", matriz[i][0], matriz[i][1]);
    
        free(vetor);
        deleta_matriz(matriz, tamanho);
        return 0;
    }
    
    void ordena(int *v, int tamanho){
        int i, continua, aux;
        
        do{
            continua = 0;
            for(i = 0; i < tamanho - 1; ++i)
                if(*(v + i) > *(v + i + 1)){
                    continua = 1;
                    aux = *(v + i);
                    *(v + i) = *(v + i + 1);
                    *(v + i + 1) = aux;
                }
        }while(continua);
    }
    
    int **tabela_matriz(unsigned int nlinhas, unsigned int ncolunas){
        unsigned int i; 
        int **m;
    
        m = (int**)malloc(nlinhas * sizeof(int*));
    
        for(i = 0; i < nlinhas; ++i){
            m[i] = (int*)malloc(ncolunas * sizeof(int));   
            m[i][0] = m[i][1] = 0;
        }
    
        return m;
    }
    
    void deleta_matriz(int **matriz, unsigned int nlinhas){
        unsigned int i;
        for(i = 0; i < nlinhas; ++i)
            free(matriz[i]);
        free(matriz);
    }

  5. Isso acontece porque você declarou a variável do tipo int / inteiro. Logo, o resultado não terá a parte fracionária

    Use o tipo float e %f no printf

    Funcionou mesmo, só que agora as outras operações de soma, subt e multipli, deram zero.

    Coloquei float no lugar de int e %f

    como ficaria?

    As outras operações você pode deixar como int e %d.

    E na atribuição da divisao, use um cast para forçar a divisão do tipo float no primeiro numero,

    divisao = (float)numero1 / numero2;

  6. Você também pode usar de ponteiros.

    No caso da soma de arrays 2D, com uma função ponteiro de poiteiro que recebe esses dois arrays.

    int **soma_matriz(int**, int**);
    Na função soma_matriz faço a alocação da matriz 2D que receberá a soma das duas matrizes (2D). Segue o programa completo, com uso dessa função e que apresenta o cubo dos valores da matriz. Veja que eu já defini o tamanho da matriz em 2, mas quem quiser testar pode alterar e também substituir as atribuições que eu já faço para matriz no inicio do programa por scanf, etc.
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX 2
    #define cubo(x)((x)*(x)*(x))
    
    void matriz_cubo(int**);
    void imprime(int**);
    int **soma_matriz(int**, int**);
    
    int main(void){
        int **matriz, **m_soma, i;
    
        matriz = (int**)malloc(MAX * sizeof(int*));
    
        for(i = 0; i < MAX; ++i)
            matriz[i] = (int*)malloc(MAX * sizeof(int));
    
        matriz[0][0] = 2;
        matriz[1][0] = 3;
        matriz[0][1] = 4;
        matriz[1][1] = 5;
    
        printf("\nMatriz original:\n");
        imprime(matriz);
        matriz_cubo(matriz);
        printf("\nMatriz Cubo:\n");
        imprime(matriz);
        m_soma = soma_matriz(matriz, matriz);
        printf("\nMatriz Soma:\n");
        imprime(m_soma);
    
        for(i = 0; i < MAX; ++i){
            free(matriz[i]);
            free(m_soma[i]);
        }
        free(matriz);
        free(m_soma);
    }
    
    int **soma_matriz(int **m_a, int **m_b){
        int i, n = 0, **m_s;
        
        m_s = (int**)malloc(MAX * sizeof(int*));
        
        for(i= 0; i < MAX; ++i){
            m_s[i] = (int*)malloc(MAX * sizeof(int));
            
            for(n = 0; n < MAX; ++n)
                m_s[i][n] = m_a[i][n] + m_b[i][n];    
    
        }   
        return m_s;
    }
    
    void imprime(int **m){
        register int i;
        for(i = 0; i < MAX; ++i)
            printf("%d | %d\n", m[i][0], m[i][1]);
    }
    
    void matriz_cubo(int **m){
        register int i, n;
        for(i = 0; i < MAX; ++i)
            for(n = 0; n < MAX; ++n)
                m[n][i] = cubo(m[n][i]);
    }

  7. Fiz algumas alterações no código.

    No caso do usuario digitar 0, o programa substitui para 10. Fiz uma pequena modificação na função fatorial também, para ficar com apenas uma linha.

    Em relação ao -1, o programa não verifica mesmo. Já espera que o usuário entre apenas com dígitos numéricos entre 0 e 9.

    #include <stdio.h>
    
    unsigned long int fatorial(int);
    
    int main(void){
        int i = 0, num = 0;
        char v[10]={};
        printf("\nPROGRAMA FATORIAL: ENTRE COM OS DIGITOS\n\n");
        printf(" 1| 2| 3| 4| 5| 6| 7| 8| 9| 0\n");
        printf("\n(0 = 10)\n\n: ");
        gets(v);
    
        for (i = 0; i < 10; i++){
            num = !(v[i] - '0') ? 10 : v[i] - '0';
            printf("#%d Fatorial de %d = %lu\n", i + 1, num, fatorial(num));
        }
    
        return 0;
    }
    
    unsigned long int fatorial(int valor){
        return !valor ? 1 : valor * fatorial(valor - 1);   
    }

  8. Veja se esse código ajuda.

    Se você estiver compilando no Windows e der erro na função __fpurge, procure por outra função disponível no seu compilador que limpe o buffer de entrada. Ou então comente essas linhas e veja se não dá erro nos inputs.

    Veja que a constante MAX eu deixei como 2

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX 2
    
    typedef struct cadastro{
        char nome[20];
        char cpf[15];
        int idade;
    }Cadastro;
    
    int main(void){
        Cadastro cad[MAX];
        int i;
        FILE *arquivo;
    
        for(i = 0; i < MAX; i++){
            printf("\n----------------\nNome: ");
            __fpurge(stdin);
            fgets(cad[i].nome, 20, stdin);
            printf("CPF: ");
            __fpurge(stdin);
            fgets(cad[i].cpf, 15, stdin);
            printf("Idade: ");
            __fpurge(stdin);
            scanf("%d", &cad[i].idade); 
        }
        
        arquivo = fopen("arquivo.txt", "w");
    
    
        if(arquivo == NULL){
            printf("Erro ao abrir o arquivo\n");
            exit(0);
        }
    
        for(i = 0; i < MAX; ++i)
            fprintf(arquivo, "%d,%s,%s,%d", i + 1, cad[i].nome, cad[i].cpf, cad[i].idade);
    
        fclose(arquivo);
    
        return 0;
    }

  9. Lether, veja se esse código ajuda

    #include <stdio.h>
    
    int main(void){
        FILE *arquivo;
        char ch;
    
        arquivo = fopen("arquivo.txt", "r");
            
        while (ch != EOF){
            ch = getc(arquivo);
            printf("%c",ch);
        }
    
        close(arquivo);
    
        return 0;
    }

  10. Fiz algumas alterações no programa.

    Mas não ficou exatamente como sua descrição.

    Limitei a quantidade de dígitos para 10 e caso o usuário passe esse limite, o programa simplesmente ignora os digitos restantes.

    #include <stdio.h>
    
    #define MAX 10
    
    unsigned long int fatorial(int);
    
    int main(void){
        int i = 0;
        char v[MAX]={};
        
        printf("Entre com a sequencia numerica (maximo de 10 digidos): ");
        gets(v);
    
        for (i = 0; i < MAX; i++)
            if (v[i] != 0)
                printf("#%d Fatorial de %d = %lu\n", i + 1, v[i] - '0', fatorial(v[i] - '0'));
        
        return 0;
    }
    
    unsigned long int fatorial(int valor){
        if (!valor)
            return 1;
        else
            return valor * fatorial(valor - 1);    
    }

  11. Veja se é algo assim.

    No programa abaixo limitei o número para o cálculo fatorial em 12, para não ultrapassar os 4 bytes de unsigned long int.

    #include <stdio.h>
    
    unsigned long int fatorial(int);
    
    int main(void){
        int i = 0, n = 0, v[12] = {};
        
        printf("Entre com os digitos até 12 (-1 para sair)\n\n");
    
        for(;;){
            printf("#%d ", i + 1);
            scanf("%d", &v[i]);
    
            if (v[i] == -1) break;
    
            if (v[i] > 12)
                printf("Digito invalido, tente novamente\n");
            else
                i++;
    
            if (i >= 12) break;
        }
        
        printf("\n");
    
        for (n = 0; n < i; n++)
            printf("#%d Fatorial de %d = %lu\n", n + 1, v[n], fatorial(v[n]));
        
        printf("\n");
    
        return 0;
    }
    
    unsigned long int fatorial(int valor){
        if (!valor)
            return 1;
        else
            return valor * fatorial(valor - 1);    
    }

  12. ficou assim.

    #include <stdio.h>
    
    int main(void){
        int d, a, m, numero, i, continua = 1;
    
        do{
            numero = i = d = a = m = 0;
    
            printf("\nPROGRAMA MULTIPLOS\n\n");
            printf("De: ");
            scanf("%d", &d);
            printf("Ate: ");
            scanf("%d", &a);
    
            printf("Entre com o numero de elementos entre 1 e 10: ");
            scanf("%d", &numero);
    
            if (numero >= 1 && numero <= 10)
                continua = 0;
            else
                printf("Numero inválido\n");
    
        }while(continua);
    
        for (i = d; i <= a; i++)
            if (!(i % numero)){
                printf("%d ", i);
                m++;
            }
        
        printf("\nEntre %d e %d temos %d multiplos\n", d, a, m);
        return 0;
    }

  13. Não consegui entrar no blog.

    Eu também fiz um programa seguindo a proposta do tópico e estou postando para compartilhar com o fórum,

    O usuário determina o tamanho do vetor, que deve ser maior que zero.

    #include <iostream>
    using namespace std;
    
    struct Valor{
        float maximo, minimo, soma, media;
    };
    
    void info(Valor *, const float *, const int);
    void mostra(Valor *);
    
    int main(void){
        int elemento = 0, i = 0;
        Valor *v = new Valor;
    
        cout << "Entre com a quantidade de elementos: ";
        cin >> elemento;
            
        if (elemento <= 0){
            cout << "Quantidade inválida. Terminando o programa...\n";
            return -1;
        }
    
        float *f = new float[elemento];
    
        for (i = 0; i < elemento; i++){
            cout << "Entre com o valor #" << i + 1 << " ";
            cin >> *(f + i);
        }
    
        info(v, f, elemento);
        mostra(v);
    
        delete v;
        delete [] f;
        return 0;
    }
    void mostra(Valor *v){
        cout << "Maior Numero: " << v->maximo << endl;
        cout << "Menor Numero: " << v->minimo << endl;
        cout << "Soma: " << v->soma << endl;
        cout << "Media: " << v->media << endl;
    }
    
    void info(Valor *v, const float *vetor, const int tamanho){
        register int i;
        bool ini_minimo = true;
    
        for (i = 0; i < tamanho; i++){
            if (ini_minimo)
                v->minimo = *(vetor + i);
            
            ini_minimo = false;
    
            if (*(vetor + i) > v->maximo) v->maximo = *(vetor + i);
            if(*(vetor + i) < v->minimo) v->minimo = *(vetor + i);
            v->soma += *(vetor + i);
        }
        v->media = v->soma / tamanho;
    }

  14. Na linha CapsAtual = GetKeyState(VK_CAPITAL) & 1, o operador de bits & (and) é usado para que a atribuição de CapsAtual seja 0 ou 1. Existem outros operadores de bits além de 'and', como 'or' e 'not'.

    CapsAtual será verdadeiro (1) se todos os bits do retorno de GetKeyState forem 1 (setados).

    Em relação ao IF. Acontece que para c/c++ qualquer retorno condicional diferente de 0 é verdadeiro. Portanto if(CapsAtual) será verdadeiro se CapsAtual for diferente de 0.

    Em linguagem C, por exemplo, não existe o tipo bool e as condicionais apenas validam se é 0 ou diferente de 0.

  15. Essa notação (++vp, vf++), é usada para fazer o incremento conforme o tamanho dos bytes do tipo (int, float, char, etc) atribuído à variável.

    No caso de vp, que é do tipo int e int tem 4 bytes, o endereço do apontador será incrementado/deslocado em 4.

    Já short int, também recebe valores inteiros, mas tem 2 bytes.

    Você pode verificar o tamanho dos bytes dos tipos com a instrução sizeof:

    printf("%d\n", sizeof(int));

    printf("%d\n", sizeof(short int));

×
×
  • Criar Novo...