Ir ao conteúdo
  • Cadastre-se
LucasCBSouto

C Numeros primos no vetor - Linguagem C

Recommended Posts

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? 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
    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 !

  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×