Ir para conteúdo
Fórum Script Brasil

vega

Membros
  • Total de itens

    22
  • Registro em

  • Última visita

Sobre vega

vega's Achievements

0

Reputação

  1. vega

    Sample Fingerprint Error

    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. 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. É porque você não está digitando enter para cada número Quando o programa pedir o número, você deve digitar e teclar enter para informar o próximo.
  5. Testei no windows também com o Turbo C e o resultado foi o mesmo. Deu tudo certo. Quando você roda o que acontece? Não ordena?
  6. Meu programa imprime em sequencia também, removendo os números repetidos. Segue o screen Achei melhor não usar getch( )e deixar o input com enter, para o usuário entrar com números inteiros.
  7. 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); }
  8. 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;
  9. 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
  10. vega

    Exercício em C

    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]); }
  11. vega

    Inserir dados em arquivo

    basta usar a função fprintf, p.ex: fprintf(fp, "%hd", variavel);
  12. use a função fseek com ftell, p.ex fseek(fp, 0, SEEK_END) ftell(fp) - 1 Se for <=0 é porque o arquivo está vazio.
  13. Bom código. Eu faria uma pequena alteração. No caso de numStr podia ser iniciada no inicio do código: char *numStr = "-1"; Aí não teria necessidade de strcpy (numStr,"-1")
  14. 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); }
  15. 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; }
×
×
  • Criar Novo...