• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

sleepwithdeath

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

13 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sugeria utilizar algum algoritmo de ordenação em vez desses "if" todos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom dia

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

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

while (r=='s')

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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. :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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í.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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 :thumbsup: )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boa tarde!

Já lá fui,agora vou fazer figura de urso :hmm:... Tenho o livro do Luís Damas já me dá para entreter umas semanas, o que falta mesmo é um pouco de objectivos!

Obrigado pelo site, e pela explicação do código.

Cumps, João Ferreira

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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. :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora