Patoshik Posted September 29, 2014 Report Share Posted September 29, 2014 Boas pessoal eu não sabia bem onde colocar a minha duvida porque não tenho muita experiência neste forum por isso deixo já as minhas desculpas caso esteja no local errado. Tenho mas de resolver isto como "tpc", para a universidade, mas só tive uma aula e por isso estou com algumas dificuldades. Alguém me pode ajudar? Cá vai, O exercício que eu tenho que resolver e´ o seguinte: Escreva um algoritmo e correspondente programa em c/c++ para calcular o maior de 4 números inteiros. Eu já tentei e cheguei a isto, #include<stdio.h> int main() /*Vou dividir o programa em dois. Comparar o num1 com o num2 e chamando numx ao seu resultado. Fazer a mesma comparação só que desta vez com o num3 e o num4 e chamando numy ao seu reultado. Voltar a fazer o mesmo só que desta vez comparando numx com numy e dando o nome de numz ao maior numero comparado.*/ { int num1, num2, num3, num4; /*4 numeros que vão ser introduzidos*/ int numx, numy, numz; /*nomes dos resultados das comparações*/ printf("Introduza 4 numeros:\n"); scanf("%d %d %d %d", &num1, &num2, &num3, &num4); if (num1>=num2) num1=numx; else num2 = numx; if (num3>=num4) num3=numy; else num4=numy; if (numx>=numy) numx=numz; else numy=numz; printf("O maior dos 4 numeros e' o %d\n", numz); return 0; } Mas não está a resultar porque quando tento rodo o programa e introduzo os valores, ele diz sempre que o maior valor é zero. Se alguém encontrar o erro, ou souber outra maneira de resolver o problema, deixe mensagem aqui no topico sff. 😉 Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted September 29, 2014 Report Share Posted September 29, 2014 não vou entrar en detalhes se o algoritmo é bom ou eficiente, no entanto olha para estas linhas : /*Comparar o num1 com o num2 e chamando numx ao seu resultado.*/ if (num1>=num2) num1=numx; else num2 = numx; /*Fazer a mesma comparação só que desta vez com o num3 e o num4 e chamando numy ao seu reultado.*/ if (num3>=num4) num3=numy; else num4=numy; 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Patoshik Posted September 29, 2014 Author Report Share Posted September 29, 2014 Obrigado pela tua resposta Voltei, já estou a dar em maluco. Pensei que já tinha acabado mas afinal voltei a testar esta treta e o programa às vezes dá certo outras vezes dá errado dependendo da forma como introduzo os números. Mas não estou a detectar o erro alguém me pode ajudar? #include int main() { int num1, num2, num3, num4; int numx, numy; printf("Introduza 4 numeros:\n"); scanf("%d%d%d%d", &num1, &num2, &num3, &num4); if (num1>=num2){num1=numx;} else{num2=numx;} if(numx>=num3){numx=numy;} else{num3=numy;} if (numy>=num4){printf("O maior numero e' o %d\n", numy);} else {printf("O maior numero e' o %d\n", num4);} return 0; } Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted September 29, 2014 Report Share Posted September 29, 2014 faz uma tabela com todos as variáveis da aplicação. depois, por cada linha de código actualiza os valores da tabela. (mais ou menos como tu fosses o computador) 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
BernardoLourenco Posted September 29, 2014 Report Share Posted September 29, 2014 (edited) Podes usar este codigo. Todo o algoritmo que precisas esta na funcao greater. #include <stdio.h> // Funcao que retorna o maior inteiro do array int greater(int array[4]) { int greater_so_far = array[0]; for(int i = 1; i < 4; ++i) if(greater_so_far < array[i]) greater_so_far = array[i]; return greater_so_far; } int main() { // Criar um array para armazenar todos os 4 numeros int numbers[4]; // Inserir os numeros for(int i = 0; i < 4; ++i) { printf("Numero #%i: ", i + 1); scanf("%i", numbers+i); // numbers + n = &numbers[n] } printf("Numero maior = %i\n", greater(numbers)); return 0; } Edited September 29, 2014 by thoga31 GeSHi Link to comment Share on other sites More sharing options...
Patoshik Posted September 29, 2014 Author Report Share Posted September 29, 2014 Ainda não dei isso nas aulas, mas informação nunca é demasiada, sempre dá para aprender alguma coisa. Obrigado 👍 Link to comment Share on other sites More sharing options...
thoga31 Posted September 29, 2014 Report Share Posted September 29, 2014 Podes usar este codigo. Todo o algoritmo que precisas esta na funcao greater. Supostamente o intuito do P@P é ajudar os membros a chegarem às respostas por si incentivando-os a pensar nos problemas por si mesmos, fornecendos pistas, sugestões, dicas, informação, tutoriais, links, etc, e esclarecendo as dúvidas que vão surgindo. É assim que se aprende. Não é com Ctrl+C->Ctrl+V... 😕 Knowledge is free! Link to comment Share on other sites More sharing options...
BernardoLourenco Posted September 29, 2014 Report Share Posted September 29, 2014 (edited) Ok sorry... 😕 A ideia era mostrar como usar vetores e ciclos for para resolver o problema. Mas obrigado pelo aviso. Edited September 29, 2014 by BernardoLourenco Link to comment Share on other sites More sharing options...
KTachyon Posted September 30, 2014 Report Share Posted September 30, 2014 Estás a utilizar mal as atribuições: num1 = numx; // num1 passa a ter o valor de numx numx = num1; // numx passa a ter o valor de num1 “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare Link to comment Share on other sites More sharing options...
Patoshik Posted September 30, 2014 Author Report Share Posted September 30, 2014 (edited) Já está 🙂 Fiz assim, #include int main() { int num1, num2, num3, num4; printf("Introduza 4 numeros:\n"); scanf("%d %d %d %d", &num1, &num2, &num3, &num4); if((num1>=num2)&&(num1>num3)&&(num1>num4)){printf("O mair numero e' o: %d\n", num1);} else if ((num2>num1)&&(num2>=num3)&&(num2>num4)){printf("O maior numero e o: %d\n", num2);} else if ((num3>num1)&&(num3>num2)&&(num3>=num4)){printf("O maior nnumero e o: %d\n", num3);} else if ((num4>num1)&&(num4>num2)&&(num4>num3)){printf("O maior nnumero e o: %d\n", num4);} else {printf("Os numeros sao todos iguais.\n");} return 0; } Acham que está bom esteticamente? Só estou a perguntar porque ouvi dizer que isso era importante, e como estou a começar é melhor corrigir já os erros do que ter de mudar mais tarde Edited September 30, 2014 by thoga31 GeSHi Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted September 30, 2014 Report Share Posted September 30, 2014 (edited) não ... esteticamente não está bem, se o que entendes como esteticamente é ser correctamente indentado. para isso deverias usar um dos métodos mais usados para o fazer, tendo algo deste género no final: #include <stdio.h> int main(void) { int num1, num2, num3, num4; printf("Introduza 4 numeros:\n"); scanf("%d %d %d %d", &num1, &num2, &num3, &num4); if((num1 >= num2) && (num1 > num3) && (num1 > num4)) { printf("O mair numero e' o: %d\n", num1); } else if ((num2 > num1) && (num2 >= num3) && (num2 > num4)) { printf("O maior numero e o: %d\n", num2); } else if ((num3 > num1) && (num3 > num2) && (num3 >= num4)) { printf("O maior nnumero e o: %d\n", num3); } else if ((num4 > num1) && (num4 > num2) && (num4 > num3)) { printf("O maior nnumero e o: %d\n", num4); } else { printf("Os numeros sao todos iguais.\n"); } return 0; } isto assenta sempre na base da facilidade de leitura do código, que no entanto também recai na implementação da solução. exemplo, olha para a tua solução e analisa a facilidade de leitura do teu código. consegues dizer rápidamente qual a diferença entre a primeira condição e a segunda ? e a terceira, onde está a diferença ? como exemplo, esta seria a minha solução: #include <stdio.h> #define XOR_SWAP(x, y) \ do { \ (x) ^= (y); \ (y) ^= (x); \ (x) ^= (y); \ } while (0) int main(void) { int num1, num2, num3, num4; printf("Introduza 4 numeros:\n"); scanf("%d %d %d %d", &num1, &num2, &num3, &num4); if (num1 > num2) XOR_SWAP(num1, num2); if (num2 > num3) XOR_SWAP(num2, num3); if (num3 > num4) XOR_SWAP(num3, num4); printf("O maior numero e o: %d\n", num4); return 0; } a macro XOR_SWAP pode ser mais complicada de perceber em termos matemáticos, mas ao ler o código sabes (pelo nome) qual a sua finalidade (trocar dois valores de posição), ficando no final com um código da função main muito simples e claro de perceber. Edited September 30, 2014 by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Gonkali Posted September 30, 2014 Report Share Posted September 30, 2014 (edited) Já está 🙂 Fiz assim, #include int main() { int num1, num2, num3, num4; printf("Introduza 4 numeros:\n"); scanf("%d %d %d %d", &num1, &num2, &num3, &num4); if((num1>=num2)&&(num1>num3)&&(num1>num4)){printf("O mair numero e' o: %d\n", num1);} else if ((num2>num1)&&(num2>=num3)&&(num2>num4)){printf("O maior numero e o: %d\n", num2);} else if ((num3>num1)&&(num3>num2)&&(num3>=num4)){printf("O maior nnumero e o: %d\n", num3);} else if ((num4>num1)&&(num4>num2)&&(num4>num3)){printf("O maior nnumero e o: %d\n", num4);} else {printf("Os numeros sao todos iguais.\n");} return 0; } Acham que está bom esteticamente? Só estou a perguntar porque ouvi dizer que isso era importante, e como estou a começar é melhor corrigir já os erros do que ter de mudar mais tarde 1 - Antes de mais, testaste o código? A 1ª Linha do código, como está escrita não te permite compilar o código. #include /*não falta nada?*/ 2 - Tens erros ortográficos no print do código. 3 - Em C a identação do código acaba por ser uma característica pessoal de cada programador, no entanto na minha opinião o teu código está um pouco confuso, nas instruções if-else encadeadas no teu código torna-se difícil associar as instruções e condições. Edited September 30, 2014 by Gonkali " The quieter you become, the more you are able to hear" "Eu adoraria mudar o mundo, mas não me deram o código-fonte." "A arte de programar consiste na arte de organizar e dominar a complexidade." "Qualquer um pode escrever um código que o computador entenda. Bons programadores escrevem códigos que os humanos entendam." Link to comment Share on other sites More sharing options...
Patoshik Posted September 30, 2014 Author Report Share Posted September 30, 2014 Sim tens razão falta o <stdio.h> mas por acaso esse erro foi ao copiar. Quanto ao resto muito obrigado pela ajuda Gonkali e aproveito tambem para agradecer a ajuda do HappyHippyHippo. Link to comment Share on other sites More sharing options...
Patoshik Posted October 2, 2014 Author Report Share Posted October 2, 2014 Alguém me pode dar uma ajuda de como fazer isto: Construa um programa para imprimir no écran os 256 caracteres ASCII (nota: Utilize printf(“%c “, i))? Mais concretamente, o que eu não sei é como colocar o pc a introduzir estes caracteres Link to comment Share on other sites More sharing options...
pwseo Posted October 2, 2014 Report Share Posted October 2, 2014 Patoshik, Uma vez que a dúvida é diferente, deverá ser colocada num tópico diferente também. Antes de a colocares, no entanto, procura no fórum, poderá haver já alguma questão semelhante. Uma dica, já agora: não te esqueças de tentar perceber o que são os caracteres ASCII (que ao contrário do que te disseram, são apenas 128... "Extended" ASCII é que tem 256). Link to comment Share on other sites More sharing options...
Patoshik Posted October 2, 2014 Author Report Share Posted October 2, 2014 Obrigado, não sabia que tinha de colocar num tópico diferente, porque em alguns fóruns o pessoal não gosta que se esteja sempre a criar novos tópicos, Mas vou seguir a tua recomendação. E coloquei aqui a questão da mesma forma que vinha na minha ficha de exercícios feita pelo professor, mas devem ser os "Extended" ASCII como tinhas dito. 👍 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