sleepwithdeath Posted November 28, 2007 at 11:43 AM Report Share #150868 Posted November 28, 2007 at 11:43 AM 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 More sharing options...
shumy Posted November 28, 2007 at 11:48 AM Report Share #150870 Posted November 28, 2007 at 11:48 AM Sugeria utilizar algum algoritmo de ordenação em vez desses "if" todos. Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática! Link to comment Share on other sites More sharing options...
Triton Posted November 28, 2007 at 12:30 PM Report Share #150878 Posted November 28, 2007 at 12:30 PM 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') <3 life Link to comment Share on other sites More sharing options...
sleepwithdeath Posted November 28, 2007 at 01:40 PM Author Report Share #150899 Posted November 28, 2007 at 01:40 PM 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 More sharing options...
Triton Posted November 28, 2007 at 02:12 PM Report Share #150908 Posted November 28, 2007 at 02:12 PM 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 More sharing options...
sleepwithdeath Posted December 5, 2007 at 02:59 PM Author Report Share #152446 Posted December 5, 2007 at 02:59 PM 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 More sharing options...
shumy Posted December 5, 2007 at 03:30 PM Report Share #152452 Posted December 5, 2007 at 03:30 PM Equivalente a: if(mes<0) dia = 0; else dia=mes*31; Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática! Link to comment Share on other sites More sharing options...
Warrior Posted December 5, 2007 at 04:47 PM Report Share #152481 Posted December 5, 2007 at 04:47 PM 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 More sharing options...
mogers Posted December 5, 2007 at 07:40 PM Report Share #152515 Posted December 5, 2007 at 07:40 PM 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 More sharing options...
sleepwithdeath Posted December 5, 2007 at 07:53 PM Author Report Share #152517 Posted December 5, 2007 at 07:53 PM Boa tarde! Já lá fui,agora vou fazer figura de urso ?... 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 Link to comment Share on other sites More sharing options...
Warrior Posted December 5, 2007 at 10:07 PM Report Share #152552 Posted December 5, 2007 at 10:07 PM "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. 👍 Link to comment Share on other sites More sharing options...
mogers Posted December 5, 2007 at 11:30 PM Report Share #152578 Posted December 5, 2007 at 11:30 PM "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 é 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 More sharing options...
MX+ Posted January 2, 2008 at 05:04 AM Report Share #157369 Posted January 2, 2008 at 05:04 AM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now