Jump to content

Ajuda numa linha de código & noutra...


sleepwithdeath

Recommended Posts

Bom dia

Estive a tentar fazer este programa mas não corre como deve ser...

Porquê? Conseguem ver? penso estar tudo bem...

#include <stdio.h>
main()
{
      int v[3],a,caca;
      char r;
      while (r='s')
      {
      printf(" Introduza 3 numeros\n");
      printf("Primeiro - ");
      scanf("%d",&v[1]);
      printf("Segundo - ");
      scanf("%d",&v[2]);
      printf("Terceiro - ");
      scanf("%d",&v[3]);
      a=1;
      for (a ; a<=1 ;a++)
          {
           if (v[1]>v[2])
              {
              if (v[2]>v[3])
                 {
                 printf("%d > %d > %d\n",v[3],v[2],v[1]);
                 }
              }
           if (v[1]>v[3])
           {
              if (v[3]>v[2])
              {
                 printf("%d > %d > %d\n",v[2],v[3],v[1]);            
                 }
              }
           if (v[2]>v[1])
           {
              if (v[1]>v[3])
              {
                 printf("%d > %d > %d\n",v[3],v[1],v[2]);
                 }
              }
           if (v[2]>v[3])
           {
              if (v[3]>v[1])
              {
                 printf("%d > %d > %d\n",v[1],v[3],v[2]);
                 }
              }
           if (v[3]>v[1])
           {
              if (v[1]>v[2])
              {
                 printf("%d > %d > %d\n",v[2],v[1],v[3]);
                 }
              }
           if (v[3]>v[2])
           {
              if (v[2]>v[1])
              {
                 printf("%d > %d > %d\n",v[1],v[2],v[3]);
                 }
              }
          }
      printf("Deseja continuar?\n");
      scanf("%c",&r); //esta parte ele não recebe
      }
}

// O output do programa é os 3 numeros ordenados e uma pergunta se quer continuar, mas em vez de receber a resposta de sim ou nao, passa e pede para por tres numeros de novo...

Link to comment
Share on other sites

Boa tarde.

1 - Tem toda a razão mas como nunca programei não sei como fazer doutra maneira, só com a experiência irei aprender isso tudo, obrigado pela sugestão...

2 - Essa mudança não resultou porque deixou até de aparecer a pergunta de continuar ou não...terminando logo após a ordenação.

Obrigado, Cumps

Link to comment
Share on other sites

2 - Essa mudança não resultou porque deixou até de aparecer a pergunta de continuar ou não...terminando logo após a ordenação.

Com esta mudança tens de inicializar a variável r com 's', senão a condição nunca chega a ser verdadeira.

Mas mesmo assim, ainda tens outro problema, o teu último scanf vai automaticamente receber o caracter '\n' que foi lido no scanf do terceiro número.

Para resolver esse problema, ou fazes algo do tipo: while(getchar()!='\n') ou scanf("%c",&r) (repara no espaço antes do %c).

Além disso, ainda tens vários problemas nesse código:

- A comparação em C faz-se com o operador ==.

- Os índices dos arrays começam em 0, logo a[3] é uma operação inválida, porque as posições válidas são 0, 1 e 2.

- Não estás a inicializar as variáveis no ciclo for.

- Não estás a respeitar regras básicas de identação, o que torna o código difícil de ler.

- Tens váriaveis que não estão a ser utilizadas, e um ciclo for a mais.

#include <stdio.h>

int main()
{
    int v[3];
    char r = 's';

    while (r=='s')
    {
    	printf(" Introduza 3 numeros\n");

    	printf("Primeiro - ");
      	scanf("%d",&v[0]);

      	printf("Segundo - ");
      	scanf("%d",&v[1]);

      	printf("Terceiro - ");
      	scanf("%d",&v[2]);

	if (v[0]>v[1])
		if (v[1]>v[2])
			printf("%d > %d > %d\n",v[2],v[1],v[0]);

	if (v[0]>v[2])
		if (v[2]>v[1])
			printf("%d > %d > %d\n",v[1],v[2],v[0]);

	if (v[1]>v[0])
		if (v[0]>v[2])
			printf("%d > %d > %d\n",v[2],v[0],v[1]);

	if (v[1]>v[2])
		if (v[2]>v[0])
			printf("%d > %d > %d\n",v[0],v[2],v[1]);

	if (v[2]>v[0])
		if (v[0]>v[1])
			printf("%d > %d > %d\n",v[1],v[0],v[2]);

	if (v[2]>v[1])
		if (v[1]>v[0])
			printf("%d > %d > %d\n",v[0],v[1],v[2]);

      	printf("Deseja continuar?\n");
      	scanf(" %c",&r);
    }

    return 0;
}

Este código já funciona como tu queres, mas o algoritmo de comparação ainda não está a 100%, deixo isso para tu melhorares. 😞

<3 life

Link to comment
Share on other sites

Boa tarde!

Para não abrir um novo tópico por uma dúvida da caca...

Gostava que me explicassem o que isto faz:

por exemplo,

dia=mes<0 ? 0 : mes*31;

Obrigado desde já

P.S. Gostava de saber de alguém que ande também a dar os 1ºs passos em programar no C ou mesmo em programar em si porque não tenho projectos nenhuns que precise de fazer e estar a praticar por desporto não se fica com muita gana. Se alguém quiser podemos ir "competindo" um com o outro para evoluirmos os dois... Espero ter-me feito entender!

Cumps, João Ferreira

Link to comment
Share on other sites

P.S. Gostava de saber de alguém que ande também a dar os 1ºs passos em programar no C ou mesmo em programar em si porque não tenho projectos nenhuns que precise de fazer e estar a praticar por desporto não se fica com muita gana. Se alguém quiser podemos ir "competindo" um com o outro para evoluirmos os dois... Espero ter-me feito entender!

Se já tiveres alguma experiência sugiro que arranjes alguém +- do teu nível e que se "piquem" a resolver o usaco: http://train.usaco.org . Os tempos em que aprendi mais foram aí.

Link to comment
Share on other sites

Mas para ir para a usaco convém aprender mais sobre a linguagem (C neste caso) primeiro. Ele disse que tava a dar os primeiros passos em C, ainda é um pouco cedo...

experimenta um tutorial dos que tem aqui no forum...

(mas depois não te esqueças de ir à usaco 👍 )

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

"Primeiros passos a programar em C" não significa que não tenha experiência noutras linguagens, e como disse que procurava projectos/desafios..

Também estou a dar os primeiros passos em muitas linguagens na faculdade, não significa que tenha começado a programar agora. 🙂

Yah, é verdade. Ando agora em prolog com restrições  ... as vezes é    :wallbash:    mas é fixe  👍

"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Link to comment
Share on other sites

  • 4 weeks later...

Teu programa "optimizado". Em C os arrays vao de 0 a n-1 ( array[3] --> 0, 1 e 2 ).

E não percebo porque tinhas um for a fazer apenas um loop ( a=1 ; a<=1 )

#include <stdio.h>
main()
{
int v[4],a;

char r = 's';

while (r='s')
{
	printf(" Introduza 3 numeros\n");
	printf("Primeiro - ");
	scanf("%d",&v[1]);
	printf("Segundo - ");
	scanf("%d",&v[2]);
	printf("Terceiro - ");
	scanf("%d",&v[3]);

	if (v[1] > v[2] && v[1] > v[3])
	{
		if (v[2]>v[3])
		{
			printf("%d > %d > %d\n",v[1],v[2],v[3]);
		}
		else
		{
			printf("%d > %d > %d\n",v[1],v[3],v[2]);
		}
	}
	else
	if (v[2] > v[3])
	{
		if (v[1] > v[3])
		{
			printf("%d > %d > %d\n",v[2],v[1],v[3]);
		}
		else
		{
			printf("%d > %d > %d\n",v[2],v[3],v[1]);
		}
	}
	else
	{
		if (v[1] > v[2])
		{
			printf("%d > %d > %d\n",v[3],v[1],v[2]);
		}
		else
		{
			printf("%d > %d > %d\n",v[3],v[2],v[1]);
		}
	}

	printf("Deseja continuar?\n");
	scanf("%c",&r); //esta parte ele não recebe
}
}
Link to comment
Share on other sites

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.