Ir ao conteúdo
  • Cadastre-se

Exata0mente

Membro Pleno
  • Posts

    21
  • Cadastrado em

  • Última visita

Reputação

8
  1. Eu cheguei a fazer um algoritmo de número perfeito em C a um tempo atrás, veja se pode ajudar de alguma forma: #include <stdio.h> #define T 4 /*Coloque aqui quantos numeros perfeitos necessita*/ #define TRUE 1 int soma_divisores(int); int valida_numero_perfeito(int, int); int main(void){ int vet[T]; int i, j; int numero_teste; j = 0; for(i = 4; j < T; i++){ /*2 e 3 sao primos*/ numero_teste = soma_divisores(i); if(valida_numero_perfeito(numero_teste, i)){ vet[j] = i; j++; } } printf("Os numeros perfeitos sao: \n"); for(i = 0; i < T; i++){ printf("%d\n", vet[i]); } return 0; } int soma_divisores(int num){ int i, soma; soma = 0; for(i = 1; i <= num / 2; i++){ if(!(num % i)){ soma += i; } } return soma; } int valida_numero_perfeito(int soma, int num){ return soma == num; }
  2. Dá até pra diminuir mais o código caso o armazenamento dos valores não seja necessário. Calcula o H e já imprime: #include<stdio.h> int main(void){ int i; float V0, H, g = 10; printf("Insira a velocidade inicial do corpo em m/s:\n"); scanf("%f", &V0); for(i = 0; i < 10; i++){ H = (V0*(i+1))-(g * (i+1) * (i+1))/2; printf("%f\n", H); } return 0; }
  3. Exata0mente

    Matrizes.

    Olá, Caso você tenha o código fácil, poste por favor. Quanto à leitura pelo scanf() colocar um valor na matriz é como se fosse uma operação normal com uma variável. Vale recordar que, matriz são coleções de variáveis. para ler pelo scanf() e alocar em um determinado elemento seria assim: //Considerando a leitura de um número inteiro scanf("%d", &vetor[1][3]);
  4. Olá @fredgaco, acredito que esteja bem no começo da programação, seja bem vindo Qual é o programa e versão que está usando para compilar seus códigos? Dependendo da versão (mais antigas) você precisa fazer algo para que o sistema fique aguardando algum comando. Uma boa alternativa é usar a função getchar() para que o sistema aguarde você digitar um caractere. Outra seria usar o famoso system("pause") para fazer o sistema enviar uma mensagem e aguardando um comando para encerrar o programa.
  5. Como se comparar um número com outro? É simples. Coloco um produto a na mesa e depois coloco outro b. Vejo, qual é o maior (por exemplo) e mantenho-o na mesa. Basicamente a lógica terá que ser assim: if(a > b) /* Coloco a e b na "mesa" e vejo se a é maior que b */ mesa = a /*Se o a é maior, mantenho na "mesa"*/ else /*Senão...*/ mesa = b /*mantenho b na mesa*/ Assumindo que tenha conhecimento na estutura do if-else. Para o seu caso haverá comparações de mais de 2 números, aí é com você!
  6. Acredito que seja importante entender, mesmo que superficialmente, o porquê temos que inicializar variáveis que, por exemplo, receba auto incrementação. "Variáveis criadas em tempo de execução são inicializadas com um valor aleatório. Já as criadas em tempo de compilação são inicializadas por 0" Todas as variáveis que criamos possuem um tipo e uma classe de armazenamento. Tipo de armazenamento (tamanho que a variável ocupará na memória e como será armazenada): Além dos tipos, existem as classes de armazenamento que são auto extern static register Obviamente isto não é algo que precisa ser aprofundado agora mas, quando declaramos uma variável dentro de uma função, esta variável já é por padrão da classe auto. Isto significa que ela será criada no exato momento em que o programa encontra sua declaração (variável criada em tempo de execução) e "destruída" quando a função terminar, ou seja, quando encontrar a declaração int numeros [5], cont, somatorio, mult; o programa vai reservar a memória para cada variável e nesta memória terá um valor aleatório comumente chamada de lixo. Existem variáveis que são criadas em tempo de compilação e por isso acabam sendo inicializada por 0 pelo compilador mas isso é mais pra frente na graduação. Referências: Treinamento em Linguagem C, 2ª Ed. pág 128 - 131.Victorine Mizrahi Tabela tipos de armazenamento: https://msdn.microsoft.com/pt-br/library/9c3yd98k.aspx
  7. Exata0mente

    Programa em c

    Legal, algumas sugestões: Dependendo do tamanho da matrícula você a pode declarar como int ou unsigned int, não precisa ser obrigatoriamente um vetor. A quantidade de alunos (variável al) você pode solicitar ao usuário O laço está errado. Na condição de teste de parada você está fazendo uma atribuição, ou seja x está recebendo o valor de al. O correto é x < al: Assim o loop do for será realizado enquanto o x for menor que o al A leitura do vetor nome em scanf precisa de correção: Quando você vai atribuir o valor por meio do scanf à um vetor, não se faz necessário o uso do operador &. O motivo é que, basicamente, você usando apenas o nome do vetor já indica ao scanf a primeira posição do vetor. Ou seja, scanf("%s", nome); É sempre bom colocar um limite na leitura, sugiro a leitura deste tópico: http://www.scriptbrasil.com.br/forum/topic/184666-código-para-de-funcionar/#comment-692246 As variáveis P1 a PS (está última não é utilizada no código), foram declaradas como float, reveja o código de formatação do scanf(). Falta também o & nestes scanf(). Se média <= 5 aprovado?? Veja se consegue fazer estas alterações
  8. Amigo, Veja se te ajuda as explicações #include<stdio.h> #include<stdlib.h> #define QNT_NOTAS 3 #define QNT_ALUNOS 5 /*Convem no inicio do aprendizado tratar alguns numeros ja dados no enunciado como constante*/ int main(){ int i, j; char aluno[20]; /*Aqui voce havia declarado uma matriz, mas para o preenchimento basta ser um vetor de tamanho consideravel*/ float nota[QNT_NOTAS]; float media; /*soma, media[5];*/ for(i = 0; i < QNT_ALUNOS; i++){ printf("Nome do aluno: "); gets(aluno); /*O gets() pode ser perigoso pois nao limita a quantidade de elementos de uma string*/ media = 0; for(j = 0; j < QNT_NOTAS; j++){ printf("Informe a %d.a nota: ", j + 1); scanf("%f%*c", &nota[j]); /*Aqui, quando voce digita o numero e da um ENTER, este ENTER e' considerado basicamente um caractere '\n', enquanto a proxima instruçao de entrada for uma leitura de um numero pelo scanf(), este ENTER sera "ignorado" e ficara em um buffer. Veja que depois que o for do j terminar sua instrucao a proxima leitura sera o gets(). Primeiramente sera verificado o buffer, que esta com o '\n' armazenado. Este '\n' sera associado ao gets() que entendera como um "ENTER de conclusao". Resultado, nao havera leitura para o aluno 2 e nem para os proximos. A melhor forma de resolver e' limpando este ENTER. Para isso, use o %*c. O asterisco em um codigo de formatacao, le o dado especifico e nao o armazena. */ media += nota[j] / QNT_NOTAS; /*O recebimento da media pode ser feito aqui*/ } /*media = soma / QNT_NOTAS;*/ printf("Aluno: %s - media: %.2f => ", aluno, media); if (media >= (float)6) /*veja o porque do (float) no link abaixo*/ printf(" Aluno aprovado\n\n"); else printf(" Aluno reprovado\n\n"); } return 0; } Sobre o link http://forum.imasters.com.br/topic/554464-me-da-um-help-por-favor-urgente/#entry2212351
  9. Exata0mente

    Programa em c

    Olá! Você chegou a fazer alguma parte deste exercício?
  10. Tranquilo! rs Alguns compiladores - segundo meu professor - inicializam estas variáveis com 0, mas não são todos! Se precisar estamos aí!
  11. Qual o valor que retorna no seu printf()? while(true) { scanf ("%d",&idoso); scanf ("%d",&meiaentrada); scanf ("%d",&comum); int i_idoso, i_meia, i_comum; int saldo, total; i_idoso = 0; i_meia = 0; i_comum = 0; i_idoso+=idoso; i_meia+=meiaentrada; i_comum+=comum; total+=idoso+meiaentrada+comum; printf ("\n Ingressos Vendidos: %d ",total); printf ("\n Ingressos Vendidos idoso %d ",i_idoso); printf ("\n Ingressos Vendidos Meia: %d ",i_meia); printf ("\n Ingressos Vendidos Comum: %d ",i_comum); saldo=(idoso*0)+(meiaentrada*13)+(comum*26); printf ("\n Saldo: R$%d,00",saldo); }
  12. Olá! tente inicializar suas variáveis i_idoso, i_meia e i_comum. Não sei se há diferença do C para o C++ quanto a este caso em específico (acredito que não) mas em C uma variável declarada dentro de um bloco são da classe auto, que são criadas em tempo de execução e por isso iniciam-se com o valor de lixo de memória, ou seja, um valor não conhecido previamente. Fiz um teste aqui e deu certo; i_idoso = 0; i_meia = 0; i_comum = 0;
  13. Acredito que ainda há pessoas que tenham bastante problema com este algoritmo, abaixo minha resolução e um vídeo com as explicações. #include <stdio.h> #define MIN 700 #define MAX 1100 #define TRUE 1 #define FALSE 0 int confirma_goldbach(int); int e_primo(int); int mostra_goldbach(int, int, int); int main(){ register int i; for(i = MIN; i <= MAX; i += 2){ if(confirma_goldbach(i)) continue; } return 0; } int confirma_goldbach(int num){ register int i, j = 2; for(i = 2; i + j <= num; i++){ if(e_primo(i)) for(j = 2; j < num; j++){ if(e_primo(j)){ if(mostra_goldbach(i, j, num)) return TRUE; } } j = 2; } return FALSE; } int e_primo(int num_teste){ register int i, cont_div; cont_div = num_teste == 1 ? 1 : 2; for(i = 2; i <= num_teste / 2; i++){ if(num_teste % i == 0){ cont_div++; break; } } return (cont_div == 2 ? TRUE : FALSE); } int mostra_goldbach(int primo1, int primo2, int num_teste){ if(primo1 + primo2 == num_teste){ printf("%3d + %3d = %3d\n", primo1, primo2, num_teste); return TRUE; } else{ return FALSE; } }
  14. Olá Queiroz! Este é um livro de grande excelência! Inclusive, tenho um canal com resolução de exercícios deste mesmo livro! Aprendi muito com este livro e recomendo a todos!
  15. Primeiro de tudo, o que você precisa que seja impresso? Uma matriz não possui um valor único, possui vários elementos, logo você precisa saber o que imprimir. Outro ponto é que não há o preenchimento da matriz conforme dito pelo @danieltm64. Os laço for tem a seguinte sintaxe: for(inicialização; condição de teste; incremento) instrução 1; /*Para apenas uma instrução pode omitir-se as chaves*/ ou for(inicialização; condição de teste; incremento){ instrução 1; instrução 2; instrução 3; ...; } Reveja estes ";" depois das funções que precisam ter um bloco de instruções

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