Ir ao conteúdo
  • Cadastre-se

ScreenBlack

Membro Pleno
  • Posts

    1.062
  • Cadastrado em

  • Última visita

  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.

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