Jump to content

[C] Ajuda: Problemas no código (Resolvido)


Recommended Posts

Posted

Boas

Estou com um problema com este exercício:

Faça um programa que preencha cada posição de um vector (10 números inteiros), com 10 números introduzidos pelo utilizador, depois devera perguntar ao utilizador de deseja visualizar números primos ou não primos utilizando para isso a letras p e n respectivamente.O programa deverá então mostrar os números primos ou não primos conforme a opção dos utilizador.

Já estive a fazer o código, só que depois de introduzir os 10 números ele da erro e fecha:

#include <stdio.h>

int main()
{

int array[10], array2[10], array3[10], i,j, h, t, calc;
char esc;

calc=1;
t=0;
h=0;

for (i=0; i<=9;i++)
{
    printf ("introduza os numeros");
    scanf ("%d", &array[ i ]);

}


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


    for ((j=array[ i ]);j--,calc!=0;)
    {
    calc=array[ i ]%j;
    }

    j=j+1;

    if (j==1)
    {

     array2[ t ]=array[ i ];
     t=t+1;
     }
     else
     {
     array3 [ h ]=array[ i ];
     h=h+1;
     }

     calc=1;

     }

printf ("para visualizar os numeros primos pressione P , e os nao primos pressione N");
scanf ("%c", &esc);
fflush (stdin);

if (esc=='p')
{
  for (i=0; i<t; i++)
  {
  printf ("os numeros primos são:%d\n", array2[ i ]);
  }
  }
  else
  {
   for (j=0;j<h;j++)
   {
   printf ("os numeros nao primos sao%d\n", array3[ j ]);
   }
   }

      system("PAUSE");

      return 0;

}

Agradecia uma ajuda 😛

Cumprimentos

Posted

Bem-vindo ao fórum nakuro! 😛

Antes de mais nada tenta usar o GeSHi (Uma ComboBox que tens nos menus em acima, seleccionas a linguagem e colocas o código entre as tags) para colocar o código. Fica mais legível. 😛

Quanto ao teu problema, não sei que é isso no 2º ciclo for

Tens outro for lá dentro mas podias testar se é Primo ou não através de uma condição if .

Eu refiro-me mais a esta condição:

for ((j=array[ i ]);j--,calc!=0;)

Acho que está um pouco confusa.

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted
#include <stdio.h>

int main()
{

int array[10], array2[10], array3[10], i,j, h, t, calc;
char esc;

calc=1;
t=0;
h=0;


for (i=0; i<=9;i++)
{
    printf ("introduza os numeros");
    scanf ("%d", &array[ i ]);

}


for (i=0; i<=9;i++)
{
    if (array[ i ]!=1)
    {

    for ((j=array[ i ]);j--,calc!=0;)
    {
    calc=array[ i ]%j;
    }

    j=j+1;

    if (j==1)
    {

     array2[ t ]=array[ i ];
     t=t+1;
     }
     else
     {
     array3[ h ]=array[ i ];
     h=h+1;
     }

     calc=1;
        }
     }

printf ("para visualizar os numeros primos pressione P , e os nao primos pressione N");
fflush (stdin);
scanf ("%c", &esc);
fflush (stdin);

if (esc=='p')
{
  printf ("os numeros primos sao:");
  for (i=0; i<t; i++)
  {
  printf ("%d\n", array2[ i ]);
  }
  }
  else
  {
  printf ("os numeros nao primos sao:");
   for (j=0;j<h;j++)
   {
   printf ("%d\n", array3 [ j ]);
   }
   }



      system("PAUSE");
      return 0;
}

Já entendi o erro no programa, quando no preenchimento dos vectores ele ler o valor 1 crasha, tentei incluir um if no pricipio mas não resultou.

quanto ao:

for ((j=array[ i ]);j--,calc!=0;)

ta uma bocado confuso LoL, o j vai tomar o vlor da posiçõ do array, depois decrementa 1 valor a esse valor e faz a condição e o calculo.

Tou a calcular se é numero primo de uma maneira esquisita, ainda sou novo nisto :nono1:, é assim:

tenho o numero 5 ppor exemplo:

e o programa vai fazer:

5%4

5%3

5%2

5%1  se nesta a verificação for 0 então o valor do decremento é 1, que quer dizer que ele só foi divisel por 1 ao longo do programa...um bocado confuso ate pa mim 😛

offtopic:uma curiosidade

Já agora hipnoted tu andas na estgf ?

eu ando lá 😛

Posted

offtopic:uma curiosidade

Já agora hipnoted tu andas na estgf ?

eu ando lá 😛

Eh eh ...

Yap, ando na ESTGF. 😛 Mas como soubeste?

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

/*NOT TESTED*/

int primo(int k) {
  int i;
  char found=0;
  for (i=2;i<=k*k;i++) {
    if ((k%i)==0) {
      found=1;
      break;
    }
  }
  return (found==1)?1:0;
}
Posted

/*NOT TESTED*/

int primo(int k) {
  int i;
  char found=0;
  for (i=2;i<=k*k;i++) {
    if ((k%i)==0) {
      found=1;
      break;
    }
  }
  return (found==1)?1:0;
}

Não me parece muito bom para aprendizagem o uso de break´s.

Normalmente quem se está a iniciar em C e algoritmia deve evitar esse tipo de código. 😛

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

/*NOT TESTED*/

int primo(int k) {
  int i;
  char found=0;
  for (i=2;i<=k*k;i++) {
    if ((k%i)==0) {
      found=1;
      break;
    }
  }
  return (found==1)?1:0;
}

concordo com o Hipnoted, ainda para mais quando tens a variável 'found' que permite saber quando deves parar o cilco.

outro pormenor, não devia ser 'i<=sqrt(k)' em vez de 'i<=k*k'?

Posted

eu ainda não tou muito familiarizado com algumas maneiras de fazer o codigo, ainda tou nos principios 😛

Posted

eu ainda não tou muito familiarizado com algumas maneiras de fazer o codigo, ainda tou nos principios 😛

É por isso mesmo que eu disse aquilo.

Se o teu professor vir um break no meio dum for corta de cima a baixo.

Warrior, não tomes isto como uma ofensa ou algo do género. 😛

"Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"

Posted

outro pormenor, não devia ser 'i<=sqrt(k)' em vez de 'i<=k*k'?

Pois devia, ou então mais simplesmente 'i*i <= k'

Desaparecido.

Posted

Sim, eu nao testei o código, devia ser i*i<=k sim.

Quanto ao break, é daquelas coisas.. de facto não é um hábito muito bom, mas este vem em nome da velocidade. Podemos removê-lo que o programa funciona exactamente igual, mas mais lento. Pelo outro lado, a outra alternativa, for (i=2;(i*i<=k) && (!found);i++) talvez complicasse demais..

Não deixo de concordar com vocês. Só deve usar breaks quem sabe o que está a fazer, e muitos professores cortam quando os vêm por isso mesmo.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.