Ir ao conteúdo
  • Cadastre-se

ScreenBlack

Membro Pleno
  • Posts

    1.062
  • Cadastrado em

  • Última visita

Tudo que ScreenBlack postou

  1. Ajustei seu código. Haviam alguns erros pequenos de sintaxe e de lógica. #include <stdlib.h> #include <stdio.h> /* Recebe um número inteiro n > 0 e mostra sua decomposição em fatores primos, calculando a multiplicidade de cada fator */ typedef struct lista { int fator; int interacao; struct lista *prox; } lista; void inserirLista(lista **li, int x, int y) { lista *aux = malloc(sizeof(lista)); aux->fator = x; aux->interacao = y; aux->prox = NULL; while( *li != NULL ) li = &(*li)->prox; *li = aux; } void imprime(lista *li) { lista *p = li; while (p != NULL) { printf("fator %d com multiplicidade %d\n", p->fator, p->interacao); p = p->prox; } } int main(void) { int n, p, q, primo, div; lista *li = NULL; printf("Informe n: "); scanf(" %d", &n); p = 2; while (n > 1) { q = 0; while (n % p == 0) { q++; n = n / p; } if (q > 0) inserirLista(&li, p, q); //printf("fator %d com multiplicidade %d\n", p, q); primo = 0; while (! primo) { p = p + 1; div = 2; primo = 1; while ( ( div <= (p / 2) ) && primo ) { if (p % div == 0) primo = 0; else div = div + 1; } } } imprime(li); return 0; }
  2. Seu código está com a lógica correta. Apenas alguns erros de sintaxe e definição de matriz para armazenar string. Segue seu código ajustado com comentários:
  3. Alguns erros: 1) Está utilizando a verificação "while()" para uma variável que não possui valor inicial. Troque por "do/while" para evitar que lixo em memória possa atrapalhar a verificação. E, o mais importante, sempre inicialize as variáveis. do { // Seu código ... } while(menu); 2) Leitura do menu está faltando "&" no "scanf()". Além disso, utilize um espaço em frente as máscaras ( "%s", "%d", "%c", ...) para evitar que a tecla "ENTER" atrapalhe na leitura, tornando desnecessário o uso da função "fflush(stdin)", até porque, essa função "fflush()" foi criada para limpara buffer de saída. Conforme apresentada na própria documentação, não é garantida sua funcionalidade para esses casos. scanf(" %d", &menu); 3) Separe as variáveis para seus tipos correspondentes na atuação do código: int menu = 0; float saque = 0.0; float deposito = 0.0; float saldo = 0.0; 4) Com a variável "menu" sendo do tipo int, não há necessidade de utilizar '1' na função switch: case 3: system("cls"); printf("O saldo atual da conta é de %.2f Reais.\n", saldo); system("pause"); system("cls"); break; Segue o código corrigido:
  4. ScreenBlack

    Função em c

    Você pode trabalhar da seguinte maneira. Criando um vetor para armazenar os valores iniciais e outro vetor para armazenar os valores repetidos. A rotina para preencher esse segundo vetor pode ser feita por dois "for()" em sequencia, onde o primeiro as posições do vetor inicial e o segundo fará a repetição relativa a cada número inserido.
  5. ScreenBlack

    Função em c

    Você deseja apenas mostrar estes números repetidos? Ou pretende também deixa-los armazenados no vetor?
  6. O código foi elaborado em linguagem C e você está tentando compilar como C++. Tente compilar com o compilador C.
  7. Na rotina apresentada por você, precisa remover o primeiro "&" para poder apresentar corretamente. Se deixar o "&", retornará o ponteiro para ponteiro de "Memoria[opcao]"
  8. ScreenBlack

    Função em c

    Qual sua dúvida? Por favor, apresente o que já fez, para podermos lhe ajudar.
  9. O problema é apenas de apresentação. Você está trabalhando como caracter, mas a rotina que mostra o conteúdo da memoria está apresentando o resultado como string, fazendo com que todo o conteúdo seja apresentado junto. Troque a rotina para: for (opcao = 0; opcao<25; opcao++) { printf ("%c | %p ",Memoria[opcao],&Memoria[opcao]); printf("\n"); } Pelo que entendi, é este o erro que você está comentando. Se não for, me avise. EDIT: OBS: As imagens contidas em "Correto Imagem" não estão carregando.
  10. A função "scanf_s()" veio a ser implementada apenas na biblioteca padrão C versão C11. Antes disso, ele fazia parte apenas da biblioteca Microsoft. Devido a retrocompatibilidade, troquei por "scanf()". Mas você pode utilizar a função "scanf_s()", sim. Ela é até melhor, porque trata buffer overflow. A função "fgets()" eu não aconselho utilizar, porque fará a leitura da tecla "ENTER" no buffer, fazendo com que a leitura seguinte não ocorra.
  11. Seu código possui alguns erros de lógica, porém nada graves. A lógica está correta. 1) Para trabalhar com lista estática, precisa sempre informar a posição da lista para poder trabalhar com os valores contidos nela. 2) Mesmo removendo um cadastro (alterando seus valores para zero), a posição não deixará de existir devido a lista ser estática, logo, precisa-se de um controle para identificar se a posição está livre ou não. struct produto { int codificacao; int quantidade; float preco; float peso; char material[20]; char fabricante[20]; int apagado; /* Controlador de posição livre */ }; 3) Aconselha-se não trabalhar com a biblioteca "conio.h", pois ela é obsoleta e não é portável. 4) Uso do comando "break" diretamente dentro do comando "for", impedindo que fosse percorrida a lista até o final (exemplo na rotina de exclusão. Fiz apenas alguns ajustes no seu código, para que as rotinas funcionassem corretamente.
  12. Pela mensagem retornada (createprocess: no such file or directory), parece que a GUI não está encontrando o caminho para as bibliotecas. Já conferiu a configuração do projeto para conferir o caminho apontado está correto? Seria interessante tentar compilar manualmente (pode ser um código simples) para testar a funcionalidade do compilador. Caso dê certo, ficará comprovado que o erro está vindo pela falta de configuração da GUI.
  13. Tentou desinstalar por completo o codeblocks e reinstala-lo na versão mais nova com o compilador embutido?
  14. Operador '&' é diferente do operador '&&' O primeiro trata a operação entre duas variáveis (ou conjuntos). O segundo faz a comparação entre duas variáveis (ou conjuntos). Caso não queira trabalhar com operadores, poderia fazer utilizando bit mask e tratar bit a bit. Seria um processo muito mais trabalhoso, pois teria de tratar 64 bits (32 bits de uma variável mais 32 bits de outra)
  15. Você não está armazenando a lista retornada pela função 'inserirCliente()' Fiz alguns ajustes em seu código, apenas para melhorar o tratamento. Comentei em cada linha alterada: Sempre que criar uma variável, não esqueça de inicializa-la, para evitar tratamentos com 'lixo' em memória.
  16. Pela questão, parece que é para ensinar a utilizar operadores lógicos em C: & -> Operador lógico 'E' | -> Operador lógico 'OU' ^ -> Operador lógico 'XOR' ~a -> retorna o inverso do valor contido na variável 'a' Então, ficaria assim: scanf("%lu %lu", &valor1, &valor2); portaAND1 = valor1 & ~valor2; /* Primeira porta AND contendo uma das entradas invertidas */ portaAND2 = ~valor1 & valor2; /* Segunda porta AND contendo a outra porta invertida */ portaOR = portaAND1 | portaAND2; /* A saída das duas primeiras portas passam pela porta OR */ printf("%lu", portaOR); Todo esse processamento, no final será equivalente a porta XOR, podendo resumir ainda mais o código para: scanf("%lu %lu", &valor1, &valor2); printf("%lu", valor1 ^ valor2);
  17. 1) Na hora de incluir um cadastro, você está esquecendo de definir o valor para a variável "contatos.deletado". contatos.deletado = ' '; 2) Você está utilizando a função "gets()" para fazer a leitura de strings. Esta função é considerada insegura, porque, internamente, não faz os tratamentos adequados para strings. No lugar dela, utilize a função "scanf()". Caso queira fazer a leitura de string que possua espaços, utilize-a da seguinte forma: scanf(" %[^\n]s", <sua_variavel_string> ); 3) Sempre inicie as variáveis em sua criação. Uma ótima maneira de evitar problemas devido a 'lixo' em memória. 4) IMPORTANTE: Não utilize a função "fflush()" para fazer a limpeza do buffer de entrada, porque ela foi criada para fazer a limpeza do buffer de saída, apenas. A própria documentação informa que ela pode ter comportamento inesperado caso utilize para limpar buffer de entrada. Para não precisar utilizar o "fflush()", utilize a função "scanf()" com um espaço na frente da primeira máscara: scanf(" %d", <variavel_int> ); Fiz apenas ajustes em seu código, trocando a função "gets()" por "scanf()" e inicializei a variável "contatos.deletado" no momento do cadastro.
  18. Elaborei uma rotina simples que apresenta o número binário:
  19. Reset normal da BIOS, tentou? Teria como testar usando teclado bluetooth? Talvez o teclado interno do notebook seja conectado via USB interna. Se o controlador USB estiver com problema, ocorrerá o mesmo problema para teclado externo USB. Caso utilize um teclado que não seja USB (neste caso seria via bluetooth) e ocorrer o mesmo problema, então 99% de chances do chipset estar com problema.
  20. Em C não existe uma máscara que apresente diretamente o valor binário. Para demonstrar, você pode utilizar a decomposição do número dividido por 2 (processo normal para conversão de bases) ou então utilizar bit mask (é mais fácil, porém envolve conhecimento mais avançado em C).
  21. Seu código está logicamente correto. Existem apenas alguns erros de sintaxe e de tratamento de string. Fiz os ajustes e adicionei comentários ao lado de cada um deles:
  22. Você está varrendo todos os códigos da tabela ASCII. Nem todo código contido nela é passível de mostrar na tela, como por exemplo, os códigos de controle (do 0 ao 32). Além disso, do código 128 até 255, vai pode ser que alguns não sejam apresentados devido ao tipo de charset utilizado no terminal. Fiz uma modificação no código, para não mostrar os caracteres do 0 ao 32: #include<stdlib.h> #include<stdio.h> int main(void) { int a = 0; printf("IMPRIMINDO TABELA ASCII"); for ( a = 1; a < 255; a++ ) { printf("Decimal: %i\tOctal: %o\tHexadecimal: %x\t\t", a, a, a); if (a > 32) printf("Caractere: %c",a); printf("\n"); } //Obs: %i imprime iteiro, %o imprime octal, %x imprime Hexadecimal, %c imprime caractere char system("pause"); return 0; }
  23. Quando define um matriz[2][2], as posições válidas iniciam em: matriz[0][0] matriz[0][1] matriz[1][0] matriz[1][1] Então, quando executa a ordem inversa, você começa no valor 1 e termina em 0.
  24. Está faltando ";" em "int i, j": int i, j; Além disso, há um outro problema, que é na função "scanf()" que faz a leitura da string. Retire "&" da variável: scanf ("%s", ent2);
  25. @Gustavo Bove Seu código está armazenando dados em espaço não pré-definido. Precisa zerar a variável coluna no momento que for incrementar a variável linha. do { do { printf ("Valor inteiro: "); scanf ("%d", &matriz[linha][coluna]); coluna++; } while (coluna < 2); coluna = 0; linha++; } while (linha < 2);

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!