Ir para conteúdo

Mateus GP

Members
  • Total de itens

    98
  • Registro em

  • Última visita

Reputação

13 Levemente Bom

1 Seguidor

Sobre Mateus GP

  • Data de Nascimento 01/10/1995

Informações Pessoais

  • Sexo
    Masculino

Últimos Visitantes

1378 visualizações
  1. Mateus GP

    calculadora

    Eu sugiro uma versão menos complexa para calcular a raiz quadrada, mais especificamente utilizando o método babilônico. Por exemplo: double sqrt (double x) { double k = x / 2.f; int prec = 0; while(prec++ < 20) { k = (k + x / k) / 2.f; } return k; } Atenção: Os erros de lógica não foram corrigidos, esta parte será sua! #include <stdio.h> #include <math.h> #include <ctype.h> /* // Alternativa 2 à raiz_quadrada inline unsigned int pell (unsigned int x) { unsigned int i = 1, k = 0; while(x >= i) { x -= i; i += 2; k++; } return k; } double raiz_quadrada (double x) { return pell(x * 10000.f) / 100.f; } */ double raiz_quadrada (double x) { double k = x / 2.f; int prec = 0; while(prec++ < 20) { k = (k + x / k) / 2.f; } return k; } /* Por definição não existe fatorial de número negativo. */ unsigned long fatorial(unsigned int numero) { unsigned long fat = 1; unsigned int i; for(i=numero; i; i--) fat *=i; return fat; } /* float raiz_quadrada(float valorRaiz) { float resultado_1,subtrai_1,passo_1; float resultado_2,subtrai_2,passo_2; float resultado_3,subtrai_3,passo_3; float raiz; subtrai_1 = 1; passo_1 = 0; passo_2 = 0; passo_3 = 0; resultado_1 = valorRaiz; while (resultado_1 >= subtrai_1){ resultado_1 = resultado_1 - subtrai_1; subtrai_1 = subtrai_1 + 2; passo_1 = passo_1 + 1; } if (resultado_1 != 0) { resultado_2 = resultado_1 * 100; subtrai_2 = (passo_1 * 20) + 1; passo_2 = 0; while (resultado_2 >= subtrai_2) { resultado_2 = resultado_2 - subtrai_2; subtrai_2 = subtrai_2 + 2; passo_2 = passo_2 + 1; } if (resultado_2 != 0){ resultado_3 = resultado_2 * 100; subtrai_3 = (((passo_1 * 10) + passo_2) * 20) + 1; passo_3 = 0; while (resultado_3 >= subtrai_3){ resultado_3 = resultado_3 - subtrai_3; subtrai_3 = subtrai_3 + 2; passo_3 = passo_3 + 1; } } } else { passo_2 = 0; passo_3 = 0; } raiz = ((passo_1 * 100) + (passo_2 * 10) + passo_3) / 100; return raiz; }*/ long potencia (int base,int expoente){ long resultado = 1; long i; for(i=expoente; i; i--) { resultado *= base; } return resultado; } void menu() { puts("*********** CALCULADORA *************"); printf("\t(+) - Soma\t\t\t(P) - Porcentagem\n"); printf("\t(-) - Subtracao\t\t\t(F) - Fatorial\n"); printf("\t(*) - Multiplicacao\t\t(B) - Conversao Binario -> Decimal\n"); printf("\t(/) - Divisao\t\t\t(D) - Conversao Decimal -> Binario\n"); printf("\t(E) - Exponenciacao\t\t(S) - Sair\n"); printf("\t(R) - Raiz quadrada\n"); } void menu_soma() { int numero1, numero2; puts("---- SOMA ----"); printf("\n\n\tPrimeiro valor: "); scanf("%d", &numero1); printf("\tSegundo valor: "); scanf("%d", &numero2); printf("\n\t%d + %d = %d", numero1, numero2, numero1+numero2); } void menu_subtracao() { int numero1, numero2; printf("\n\n\tS U B T R A C A O"); printf("\n\n\tPrimeiro valor: "); scanf("%d", &numero1); printf("\tSegundo valor: "); scanf("%d", &numero2); printf("\n\t%d - %d = %d", numero1, numero2, numero1-numero2); } void menu_multiplicacao() { int numero1, numero2; printf("\n\n\tM U L T I P L I C A C A O"); printf("\n\n\tPrimeiro valor: "); scanf("%d", &numero1); printf("\tSegundo valor: "); scanf("%d", &numero2); printf("\n\t%d * %d = %d", numero1, numero2, numero1*numero2); } void menu_divisao() { float numero1, numero2; printf("\n\n\tD I V I S A O"); printf("\n\tPrimeiro valor: "); scanf("%f", &numero1); printf("\tSegundo valor: "); scanf("%f", &numero2); if(numero2 == 0) { printf("\n\tErro divisao por zero"); } else { printf("\n\t%.2f / %.2f = %.2f", numero1, numero2, (float)numero1/(float)numero2); // Erro float(numero1)/float(numero2) } } void menu_exponenciacao() { int base, expoente; int resultado = 1; printf("\n\n\tE X P O N E N C I A C A O"); printf("\n\n\tBase: "); scanf("%d", &base); printf("\tExpoente: "); scanf("%d", &expoente); if (expoente) { resultado = potencia(base,expoente); } printf("\n\t%d elevado a %d = %d", base, expoente, resultado); } void menu_raiz_quadrada() { float valorRaiz, resultadoRaiz; printf("\n\n\tR A I Z Q U A D R A D A"); printf("\n\n\tValor: "); scanf("%f", &valorRaiz); resultadoRaiz = raiz_quadrada(valorRaiz); printf("\n\tRaiz quadrada de %.0f = %.0f", valorRaiz, resultadoRaiz); } void menu_porcentagem() { int numero1, numero2; float resultado; printf("\n\n\tP O R C E N T A G E M"); printf("\n\n\tValor: "); scanf("%d", &numero1); printf("\tPorcentagem: "); scanf("%d", &numero2); resultado = (numero1 * numero2) / 100.0; printf("\n\t%d %% de %d = %.2f", numero2, numero1, resultado); } void menu_fatorial() { int numero1; printf("\n\n\tF A T O R I A L"); printf("\n\n\tValor: "); scanf("%d", &numero1); printf("\n\tO fatorial de %d = %lu", numero1, fatorial(numero1)); } int binario_decimal (int k) { puts("Função não implementada."); return 0; } int decimal_binario (int k) { puts("Função não implementada."); return 0; } void menu_conversao_binario_decimal() { int /*binario[8], */numero1; printf("\n\n\tB I N A R I O P A R A D E C I M A L"); printf("\n\n\tDigite o numero binario(8 bits): "); scanf("%d", &numero1); printf("\n\tEquivalente em Decimal: %d", binario_decimal(numero1)); // Função inexistente } void menu_conversao_decimal_binario() { int numero1; printf("\n\n\tD E C I M A L P A R A B I N A R I O"); printf("\n\n\tDigite o numero em decimal(256): "); scanf("%d", &numero1); printf("\n\tEquivalente em Binario: %d", decimal_binario(numero1)); } int main(int argc, char*argv[]) { /*float numeroPorcentagem,resultadoPorcentagem; float valorRaiz,resultadoRaiz;*/ char oper; do { menu(); printf("\tOpcao: "); scanf("%c", &oper); switch(tolower(oper)) { case '+': menu_soma(); break; case '-': menu_subtracao(); break; case '*': menu_multiplicacao(); break; case '/': menu_divisao(); break; case 'e': menu_exponenciacao(); break; case 'r': menu_raiz_quadrada(); break; case 'p': menu_porcentagem(); break; case 'f': menu_fatorial(); break; case 'b': menu_conversao_binario_decimal(); break; case 'd': menu_conversao_decimal_binario(); break; case 's': printf("\n\n\tPrograma finalizado"); break; default: printf("\n\n\tOpcao Invalida"); } printf("\n\n\t"); }while(tolower(oper) != 's'); return 0; }
  2. Mateus GP

    Problema com o buffer usando o delimitador de string

    #include <stdio.h> int main() { char Test[99]; do { scanf(" %3s%*s",Test); printf("%s\n",Test); } while( 1 ); }
  3. Mateus GP

    [Resolvido] Cifra de Vigenère

    Por que códigos tão extensos?
  4. Mateus GP

    Copiar String

    Neste contexto, sim, entretanto, esta função faz parte de um programa maior que escrevi.
  5. Mateus GP

    Copiar String

    #include <stdio.h> char* string_copy (const char* source, char* destination) { while(*source != '\0') *destination++ = *source++; *destination = '\0'; return destination; } int main (int argc, char** argv) { char s[256]; string_copy("Teste", s); puts(s); return 0; }
  6. Mateus GP

    Lendo cada caractere de um arquivo e armazenando em uma array

    Olha... Você não especificou o contexto do programa, i. e., você quer ler uma linha ou o arquivo inteiro? Pelo que vi, há alguns erros gritantes no seu código. A cada vez que a função getc é chamada o caractere apontado pelo indicador de posição interno do fluxo é retornado e o indicador incrementado (ou algo assim). Você está descartando caracteres ao não salvar seu valor em uma variável, ou seja, o certo seria algo semelhante à: while((c = getc(arquivo)) != EOF) { if(c == '\n') break; temp[i++] = c; } Como você apenas postou um fragmento descontextualizado do código fica difícil descobrir, com certeza, quais são os erros, porém irei deixar um exemplo de como usar o malloc para armazenar um arquivo na memória: #include <stdlib.h> #include <stdio.h> //#define RESET inline long int file_size (FILE* fl) { long int sz, p; p = ftell(fl); fseek(fl, 0L, SEEK_END); sz = ftell(fl); fseek(fl, p, SEEK_SET); return sz; } int main(int argc, char **argv) { long int i = 0; FILE* arquivo; char *temp; int c = 0; if((arquivo = fopen("./nome", "rb")) == NULL) { perror("fopen"); abort(); } if((temp = malloc(sizeof(char) * file_size(arquivo) + 1)) == NULL) { perror("malloc"); abort(); } while (c != EOF) { #ifdef RESET i = 0; #endif while((c = getc(arquivo)) != EOF) { if(c == '\n') break; temp[i++] = c; } temp[i] = '\0'; /*FAZER AS FUNÇÕES NECESSÁRIAS*/ } puts(temp); fclose(arquivo); free(temp); return 0; }
  7. Mateus GP

    Tamanho de fonte, biblioteca visual ?

    Não entendi muito bem sua dúvida. Seu programa é em modo texto? Windows API? X11? GTK? Qt? SDL? DirectX? GDI? Se você não especificar as necessidades, condições, ambiente... Não há o que fazer. Se for em modo texto (terminal, "console", "prompt") não existem soluções plausíveis, exceto algumas poucas e relativamente complexas no caso do Linux.
  8. Mateus GP

    Concatenar strings usando aritmetica de ponteiros

    Não é necessário o uso de "contadores". Como é apenas um ponteiro para uma variável, incrementar seu valor não causará efeitos, dito isto. Vamos usar os operadores: ++, *, !=, =. void StrCat (const char* origem, char* destino) { // Primeiro localizar o caractere nulo, *destino é equivalente a destino[0]. // '\0' = Caractere nulo ou zero. while(*destino != '\0') // Atenção: (*destino)++ é diferente de destino++, pense nisto. destino++; while(*origem != '\0') // Atenção: (*destino)++ é diferente de *destino++, pense nisto também. *destino++ = *origem++; *destino = '\0'; }
  9. Mateus GP

    Dificuldades em fazer função com Char

    const char* idioma(int num) { static const char frases[5][16] = {"Welcome", "???", "??", "Bem-vindo", "Benvenuto"}; return frases[num - 1]; }
  10. Olha... Sugiro que preste mais atenção, principalmente quando se trabalha com ponteiros, sobretudo malloc ou qualquer um de seus derivados. sizeof dá o tamanho em bytes duma variável, tipo et cetera... Por sua vez malloc reserva n bytes, ou seja, uma variável do tipo char geralmente possui 1 byte ou 8 bits, porém outros tipos, como int ou void*, sempre possuem mais de um byte. Quando se utiliza algo do tipo: malloc(sizeof(TIPO) * k). Deve-se ter em mente que sizeof(TIPO) dará o número de bytes de uma única variável e k multiplicará este número, id est, serão alocadas k variáveis de TIPO (isto é equivalente a: calloc(k, sizeof(TIPO)) ). ... pont->nomes.nome = (char*)malloc(sizeof(char)); pont->nomes.sobrenome = (char*)malloc(sizeof(char)); ... Vendo este código está claro que será alocado o espaço para somente um caractere, contudo mais a frente você designa à função fgets ler 20 caracteres? Não há uma discrepância? Isto pode gerar uma falha de segmentação. Além disso, o fato de não verificar se a função malloc retornou um ponteiro nulo é ainda mais preocupante, em programas que usam muito estas funções, penso que seja mais produtivo fazer uma subrotina visando tais correções. Algo como: #include <stdlib.h> ... void* safe_malloc (size_t sz) { void* pmem = malloc(sz); if(pmem == NULL) { perror("safe_malloc"); abort(); } return pmem; } Obs: Qualquer erro em minhas sugestões basta me avisar, peço desculpas se não fui útil, afinal não pude dedicar muito mais tempo para analisar suas dúvidas, entretanto não hesite em ser mais específica.
  11. Mateus GP

    [Resolvido] Descobrir se uma string é um Palíndromo.

    #include <stdio.h> #include <string.h> int ispal (const char* s) { const char* ps = s + strlen(s) - 1; while(s < ps) if(*s++ != *ps--) return 0; return 1; } int main (int argc, char** argv) { const char* const s_Bool[] = {"false", "true"}; printf("true\ttrue\tfalse\tfalse\n%s\t%s\t%s\t%s\n", s_Bool[ispal("1234321")], s_Bool[ispal("12321")], s_Bool[ispal("1234210")], s_Bool[ispal("12312")]); return 0; }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.