Ir para conteúdo
Fórum Script Brasil

vega

Membros
  • Total de itens

    22
  • Registro em

  • Última visita

Tudo que vega postou

  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; }
  16. vega

    Manipulação de arquivos.

    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; }
  17. 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); }
  18. 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); }
  19. 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; }
  20. 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; }
  21. 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.
  22. vega

    Ajuda com duvida em C

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