Ir ao conteúdo

Posts recomendados

Postado

Pessoal, estou com dificuldades para selecionar este problema:

Seja dado um vetor A com 20 números naturais maiores que 1. Escreva um código na linguagem C que calcule  a quantidade de números primos no vetor.

 

O código está abrindo a tela de saída e permintindo a escrita dos numeros dos 20 vetores, porém, após isso nada acontece e a tela fica parada apenas com o cursor piscando.

 

O código está assim:

 

#include<conio.h>
#include<stdio.h>
#include<math.h>

int main ()
    {
        int a[20], i, contap, conta, aux, h, x;

    contap = 0;

    printf("Entre com os numeros para os vetores:");
    {
        for (i=0; i < 20; i++)
        scanf ("%d", &a[1]);
    }

    {
        for (i = 0; i < 20; i++)

            aux = a[i];
            conta = 0;
        {
           for(h = 1; h <= aux; i++)

            x = aux % h;
              {
            if(x==0)

                  conta = conta + 1;
              }

            if( conta = 2)

            contap = contap + 1;


        }
    }
    printf ("O total de numeros primos no vertor eh: %d", contap);
    }

 

O que deve ser feito para que funcione? 

 

 

 

 

Postado
    printf("Entre com os numeros para os vetores:");
    {
        for (i=0; i < 20; i++)
        scanf ("%d", &a[1]);
    }

Além das chaves, verifique esse scanf, pois contém um erro nele.

 if( conta = 2)

            contap = contap + 1;

Dentro de um if não  usa somente um = para comparações, pois o compilador vai achar que você estará tentando definir o valor de conta para 2, então para resolver isso utiliza-se  == . Enfim, se der certo ou errado, avise aqui, pois a galera irá te ajudar !

  • Amei 1
Postado

Olá @LucasCBSouto

Dica: Depois que remover os bugs do seu código, recomento que organize em funções. Pelo menos uma função separada do main, por exemplo; uma função que determine se um dado inteiro é ou não primo. Isso simplifica a leitura do código, nesse caso é mais por uma questão de estética e estilo mesmo.

  • Curtir 2
Postado

Oi, @Asrety ,

 

Obrigado pela sinalização não tinha notado esse erro.

 

Oi, @Gabriel_Moro ,

Mudei de diversas formas as chaves e corrigi a mudança sinalizada por @Asrety, mas mesmo assim na tela de saída continua o mesmo problema, após a entrada com os vetores não continua  e fica apenas o cursor piscando sem possibilidades de reconhecimento de dígitos (tipo paralisado).


 

Oi,  @AnsiC ,

 

Obrigado pela sugestão, acho que entendi, é tipo por duas main ()?Já vi algo semelhante em exercício que estava a resolver, sou extremamente iniciante na matéria. 

 

 

Até agora o código está assim:

 

#include<conio.h>
#include<stdio.h>
#include<math.h>

int main ()
{
    int a[20], i, contap, conta, aux, h, x;

    contap = 0;

    {
    printf("Entre com os numeros para os vetores:");
    for (i=0; i < 20; i++)
        scanf ("%d", &a[1]);
    }

    {
    for (i = 0; i < 20; i++)

            aux = a[i];
            conta = 0;

    for(h = 1; h <= aux; i++)

            x = aux % h;

        if(x==0)

            conta = conta + 1;

        if( conta == 2)

            contap = contap + 1;

    }
    printf ("O total de numeros primos no vertor eh: %d", contap);
}

 

Postado

Encontrei os seguintes erros:

 

    scanf ("%d", &a[1]);

O certo seria:

scanf ("%d", &a[i]);

Outro erro:

for(h = 1; h <= aux; i++)

Acredito que o correto é:

for(h = 1; h <= aux; h++)

Também estão faltando alguns { e } no seu código.

Se quiser que um laço execute várias instruções, tem que colocar as linhas entre {}

 

  • Curtir 1
Postado

@LucasCBSouto é tipo duas main, só não com mesmo nome porque não pode, porém sim com nome bem sugestivo, por exemplo; um dos problemas do problema (no geral um problema pode ser dividido em outros subproblemas) é preencher o seu vetor com as informações cedidas pelo usuário.

/**> vector_pegar: preencher vetor de tamanho n de valores inteiros */
void vector_pegar( unsigned int n, int vector[ n ] )
{	printf( "%s", "Preencher com numeros para os vetores: " );
	for( unsigned int x= 0; x < n; ++x )
	{	scanf( "%i", &(vector[ x ]) );
	}
}

/**> main: Principal função de um programa escrito em c*/
int main( void )
{	int vector[20];
	/*: O vetor para salvar os dados */

	vector_pegar( 20, vector );
	/*: chamando o comando de preenchimento separado para testar */
	return 0;
}

 

  • Curtir 1
  • Obrigado 1
Postado

Oi, @AnsiC,

 

Entendi, AnsiC, acho que entendi, vou tentar implementar isso.

Obrigado, AnsiC.

 

Oi, @Flávio Pedroza ,

 

Obrigado, Fávio Pedroza.

 

Fiz as correções que sugeristes, o programa avançou até o fim, o único problema agora  é o resultado dos números primos para a sequência lida, por exemplo, escrevi uma sequencia de 2 a 21, era pra mostrar o total de primos igual a 9, passou a mostrar = a 0, alterei as {} e passou a mostrar total igual a 4. Creio que deve ser algo em torno da divisão.

 

 

O código (com o erro de retorno atual) ficou assim:


 


#include<conio.h>
#include<stdio.h>
#include<math.h>

int main ()
{
    int a[20], i, contap, conta, aux, h, x;

    contap = 0;

    {
    printf("Entre com os numeros para os vetores:");
    for (i=0; i < 20; i++)
        scanf ("%d", &a[i]);
    }

    {
    for (i = 0; i < 20; i++)

            aux = a[i];
            conta = 0;

    }
    for(h = 1; h <= aux; h++)
    {

            x = aux % h;

        if(x==0)

            conta = conta + 1;

        if( conta == 2)

            contap = contap + 1;

    }
    printf ("O total de numeros primos no vetor eh: %d", contap);
}

 

Postado

Como disse, é questão de adequar as chaves { }. Após o for(....) você deve colocar um { se for executar mais de linha de código dentro do laço e posteriormente fechar com um }. Acredito que assim irá funcionar:

#include<conio.h>
#include<stdio.h>
#include<math.h>

int main ()
{
    int a[20], i, contap, conta, aux, h, x;

    contap = 0;

    
    printf("Entre com os numeros para os vetores:");
    for (i=0; i < 20; i++)
        scanf ("%d", &a[i]);
    
    
    for (i = 0; i < 20; i++)
    {
            aux = a[i];
            conta = 0;

            for(h = 1; h <= aux; h++)
            {

                x = aux % h;

                if(x==0) 
                    conta = conta + 1;
            }

            if( conta == 2) 
                contap = contap + 1;

    }
    printf ("O total de numeros primos no vetor eh: %d", contap);
}

 

  • Curtir 1
  • Obrigado 1
Postado

@LucasCBSouto fico feliz :D bom aqui está um codigo que também funcionou (nos meus testes), ele está utilizando funções que foi a dica que nosso amigo @AnsiC deu para ti, postei mesmo só pra você olhar e ajudar alguem no futuro, boa sorte nos estudos !

#include <stdio.h>

#define MAX 20 //definição do tamanho

void inserirValores(int vetor[]){ //função para preencher
	
	printf("\n\nPreenchendo valores...\n\n");
	
	for(int i=0; i<MAX; i++){
		printf("\nN%d: ", i);
		scanf("%d", &vetor[i]);
	}
	
}

int verificarPrimo(int num){ //verificação separada de um numero por vez
	
	int contagem = 0;
	
	for(int i=1; i<=num; i++) 
		if(num % i == 0) contagem ++;
	
	return (contagem == 2); //se contagem ficar com valor de 2, é primo, logo retornará 1, senão 0.
}

int main(){
	
	int vetor[MAX], cont=0;
	
	inserirValores(vetor);
	
	for(int i=0; i<MAX; i++)
		if(verificarPrimo(vetor[i])) //se retornar 1 é um primo, e logo será incrementado
			cont++;
	
	printf("\n\nTotal de Numeros Primos: %d\n\n", cont);
	
	return 0;
}

E fique muito esperto em relação a chave, o @Flávio Pedroza te deu uma dica, e irei reforçar, como pode ver nesse código acima, no for de leitura de dados, foi necessário, pois passou de um comando(printf e scanf) , agora na main, pode ver que não utilizei, pois o for só possui um comando, o if, e dentro do if novamente somente um comando, então : 1 comando não precisa, passou disso é necessário, enfim, é isso.

  • Curtir 1
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!