psgg 0 Posted October 23, 2011 Report Share Posted October 23, 2011 Boas malta, primeira vez que escrevo aqui, sou um noob em C : minha dúvida deve ser bastante simples de resolver, mas não estou a conseguir... ... basicamente eu tenho que fazer na opção 6, é fazer com q ela mostre o menu de novo ... passo a citar o que a minha prof pediu (para ser mais simples de compreensão do que através de palavras minhas) : "6 - Introduzir dois novos inteiros positivos, num1 e num2 Permite ao utilizador introduzir dois inteiros positivos que ficam guardados em variáveis do programa e volta a apresentar o menu, para que o utilizador se relembre das opções disponíveis. Note portanto que o que deve ser efectuado nesta opção 6 é basicamente o mesmo que deve ser efectuado no início da execução do programa, quando o utilizador vai introduzir pela primeira vez dois números. Ao conceber o programa, deve assumir que o utilizador é bem comportado e só introduz inteiros positivos. Após executar qualquer das opções, excepto a opção 0 que faz terminar a execução, o programa deve avisar o utilizador que está pronto a ler um novo valor de opção, em seguida ler esse valor e prosseguir com a execução dessa nova opção. Isto é, o programa irá efectuar repetidamente a leitura de uma opção e o processamento dessa opção, enquanto a opção indicada for diferente de 0 (e diferente de opção inexistente)." e eu estava a tentar fazer isso através dum if ... mas não consigo, pois quando meto 6 na opcao, ele salta por cima não reconhece #include <stdio.h> #include <stdlib.h> /* funcao main inicia a execucao do programa*/ int main(void) { int num1; /* primeiro inteiro dado pelo utilizador */ int num2; /* segundo inteiro dado pelo utilizador */ int opcao; /* opcao a executar */ /* processar opcao 6 */ printf( "Escreva os dois inteiros positivos: \n"); scanf( "%d%d", &num1, &num2); printf( "Menu:\n"); printf( "1 - Divisao inteira de num1 por num2\n" ); printf( "2 - Divisao real de num1 por num2\n" ); printf( "3 - Multiplo de num2 mais proximo de num1\n" ); printf( "4 - Lista de multiplos positivos de num1 e num2\n" ); printf( "5 - Menor multiplo comum positivo de num1 e num2\n" ); printf( "6 - Introduzir dois novos inteiros positivos, num1 e num2\n" ); printf( "0 - Terminar\n" ); if ( opcao == 6 ) { printf( "Escreva os dois inteiros positivos: \n"); scanf( "%d%d", &num1, &num2); printf( "Menu:\n"); printf( "1 - Divisao inteira de num1 por num2\n" ); printf( "2 - Divisao real de num1 por num2\n" ); printf( "3 - Multiplo de num2 mais proximo de num1\n" ); printf( "4 - Lista de multiplos positivos de num1 e num2\n" ); printf( "5 - Menor multiplo comum positivo de num1 e num2\n" ); printf( "6 - Introduzir dois novos inteiros positivos, num1 e num2\n" ); printf( "0 - Terminar\n" );} /* inicializar opcao com valor != 0 para que o ciclo nao termine logo */ /* ciclo de leitura a execucao da opcao ate que essa opcao seja 0 */ while ( opcao != 0 ) { /* ler valor para opcao */ printf("Opcao:\n"); scanf("%d", &opcao); /* Processar opcao */ if ( opcao < 0 || opcao > 6 ) opcao = 0 ; else if ( opcao == 0 ) printf("Fim.\n"); /* nao faz nada: instrucao nula */ else if ( opcao == 1 ) { printf( "resultado = %d\n", num1/num2 ); } } system("PAUSE"); return 0; } /* fim da funcao main */ até agora só tenho as opções 1 e 0 a funcionar, pois estou a fazer pelos passos que a prof recomenda .... ja estou á dois dias para tentar resolver isto, e tá complicado...tenho firma a certeza que é uma coisa super banal...mas pronto como disse sou noob nisto.... se der para dar uma ajudazinha e umas dicas era bacano Link to post Share on other sites
Diutsu 1 Posted October 23, 2011 Report Share Posted October 23, 2011 estás a pensar mal na execução do programa o que tu estás a fazer é: 1. pedir numeros e apresentar as opções, 2. verificar se "opcao" é 6 3. - se sim, pedir os numeros e apresentar as opçoes novamente 4. Se o utilizador não for 0 continua, se for 0 vai para 8. 5. pede "opção" ao utilizador 6. processar "opção" (0 ou 1) 7 voltar a 4. 8. Sai do programa Agora tenta descobrir com é que após teres inserido 6 consegues chegar a 2. XX SINFO - Semana Informática Link to post Share on other sites
psgg 0 Posted October 23, 2011 Author Report Share Posted October 23, 2011 estás a pensar mal na execução do programa o que tu estás a fazer é: 1. pedir numeros e apresentar as opções, 2. verificar se "opcao" é 6 3. - se sim, pedir os numeros e apresentar as opçoes novamente 4. Se o utilizador não for 0 continua, se for 0 vai para 8. 5. pede "opção" ao utilizador 6. processar "opção" (0 ou 1) 7 voltar a 4. 8. Sai do programa Agora tenta descobrir com é que após teres inserido 6 consegues chegar a 2. eu não percebi bem... ou seja tenho q repensar a "opcao 6" ... tenho que a restruturar?? ... o que me veio logo a cabeça é usar um if, já experimentei acresentar um else a seguir para continuar, mas não dá na mesma ... já pensei que podesse ser dentro do ciclo while (este ciclo a prof indica para fazer) , mas não pode ser pq ela diz para fazer a opção 6 antes .... estou a usar os comandos errados? Link to post Share on other sites
Diutsu 1 Posted October 23, 2011 Report Share Posted October 23, 2011 Pensa em papel. Escreve os passo que queres que o programa execute. Os vários casos possiveis de serem executados. E o enunciado já tem uma grande ajuda: o que deve ser efectuado nesta opção 6 é basicamente o mesmo que deve ser efectuado no início da execução do programa, quando o utilizador vai introduzir pela primeira vez dois números. (basta voltares ao inicio)Quanto tiveres essa parte resolvida é que começas a pensar em código. XX SINFO - Semana Informática Link to post Share on other sites
psgg 0 Posted October 23, 2011 Author Report Share Posted October 23, 2011 Pensa em papel. Escreve os passo que queres que o programa execute. Os vários casos possiveis de serem executados. E o enunciado já tem uma grande ajuda: (basta voltares ao inicio) Quanto tiveres essa parte resolvida é que começas a pensar em código. não estou a conseguir... vamos por passos, para ver se o meu raciocinio esta correcto 1: faço o menu, como fiz com os printfs etc .......nesse menu não estou a incorporar printf("Opcao:\n"); scanf("%d", &opcao); para depois não me pedir duas vezes a "opcao" 2: inicio um if... ja pensei usar o switch/case penso q seria mais simples, mas como a minha prof ainda nao chegou a essa parte da materia deduzo q não seja para usar isso; 3: agora devia consegur fazer algo para ler esse if, e não saltar por cima, como o programa esta a fazer, ja pensei introduzir um scanf, antes do if, mas assim troca-me o output ... não estou mesmo a perceber Link to post Share on other sites
psgg 0 Posted October 23, 2011 Author Report Share Posted October 23, 2011 por exemplo, se eu puser o menu dentro do clico while, assim ja corre bem #include <stdio.h> #include <stdlib.h> /* funcao main inicia a execucao do programa*/ int main(void) { int num1; /* primeiro inteiro dado pelo utilizador */ int num2; /* segundo inteiro dado pelo utilizador */ int opcao; /* opcao a executar */ /* processar opcao 6 */ printf( "Escreva os dois inteiros positivos: \n"); scanf( "%d%d", &num1, &num2); printf( "Menu:\n"); printf( "1 - Divisao inteira de num1 por num2\n" ); printf( "2 - Divisao real de num1 por num2\n" ); printf( "3 - Multiplo de num2 mais proximo de num1\n" ); printf( "4 - Lista de multiplos positivos de num1 e num2\n" ); printf( "5 - Menor multiplo comum positivo de num1 e num2\n" ); printf( "6 - Introduzir dois novos inteiros positivos, num1 e num2\n" ); printf( "0 - Terminar\n" ); /* inicializar opcao com valor != 0 para que o ciclo nao termine logo */ /* ciclo de leitura a execucao da opcao ate que essa opcao seja 0 */ while ( opcao != 0 ) { /* ler valor para opcao */ printf("Opcao:\n"); scanf("%d", &opcao); /* Processar opcao */ if ( opcao < 0 || opcao > 6 ) opcao = 0; else if ( opcao == 0 ) printf("Fim.\n"); /* nao faz nada: instrucao nula */ else if ( opcao == 1 ) { printf( "resultado = %d\n", num1/num2 );} else if ( opcao == 6 ) { printf( "Escreva os dois inteiros positivos: \n"); scanf( "%d%d", &num1, &num2); printf( "Menu:\n"); printf( "1 - Divisao inteira de num1 por num2\n" ); printf( "2 - Divisao real de num1 por num2\n" ); printf( "3 - Multiplo de num2 mais proximo de num1\n" ); printf( "4 - Lista de multiplos positivos de num1 e num2\n" ); printf( "5 - Menor multiplo comum positivo de num1 e num2\n" ); printf( "6 - Introduzir dois novos inteiros positivos, num1 e num2\n" ); printf( "0 - Terminar\n" ); } } system("PAUSE"); return 0; } /* fim da funcao main */ mas não sei se é isto q ela quer, pois ele diz para fazer opcão 6 antes do while, pelo esqueleto q ela dá ... ou será q sou eu q estou a perceber mal a coisa? Link to post Share on other sites
pmg 85 Posted October 23, 2011 Report Share Posted October 23, 2011 psgg: experimenta meter o menu numa funcao propria ... numa primeira versao essa funcao nao precisa de parametros, escreve o menu no ecra e devolve uma tacle valida. Se, enquanto estiveres a processar a funcao do menu, detectares uma tecla invalida, simplesmente ignora essa tecla. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código! Link to post Share on other sites
Diutsu 1 Posted October 23, 2011 Report Share Posted October 23, 2011 mas assim é que resulta como querias inicialmente. XX SINFO - Semana Informática Link to post Share on other sites
Cronometro 0 Posted October 23, 2011 Report Share Posted October 23, 2011 psgg: experimenta meter o menu numa funcao propria ... numa primeira versao essa funcao nao precisa de parametros, escreve o menu no ecra e devolve uma tacle valida. Se, enquanto estiveres a processar a funcao do menu, detectares uma tecla invalida, simplesmente ignora essa tecla. ele ainda não deve ter aprendido funções, o melhor é um ciclo. Software is like sex: It’s better when it’s free. Link to post Share on other sites
psgg 0 Posted October 24, 2011 Author Report Share Posted October 24, 2011 ele ainda não deve ter aprendido funções, o melhor é um ciclo. eu sei que dava para fazer numa função...mas ainda não cheguei a essa parte da materia...então estou a seguir-me pelo q já demos... sei disso, porque não é a primeira vez que estou a repetir a cadeira, aliás é o terceiro ano 😳 .. mas os anos anteriores sempre dei prioridade ás outras cadeiras, não sei se é pelo meto de ensino q aplicam na minha faculdade, mas não nunca consegui entender bem a logica de estruturação dos programas ...pior é que no meu curso tenho duas cadeiras em linguagem C , prog I e prog II ...mas este ano com jeitinho passo ás duas!! o agora os grandes dificuldades neste projecto vêem nas proximas "opções" ehehehe ...se precisar de ajuda depois inicio um novo topico por aqui Link to post Share on other sites
psgg 0 Posted October 24, 2011 Author Report Share Posted October 24, 2011 mas assim é que resulta como querias inicialmente. é mesmo assim que eles estão a pedir no projecto, já confimei obrigado pela dica inicial que deste ao ínicio não estava a perceber, mas depois consegui perceber onde querias chegar.... eu tinha a noção que era um erro primário o que eu estava a fazer, mas demorei a percebe-lo Link to post Share on other sites
mundo 4 Posted October 24, 2011 Report Share Posted October 24, 2011 Não conheces switchs ainda? Talvez seja a melhor opção para isto e o codigo nao fica tao confuso. Link to post Share on other sites
Cronometro 0 Posted October 28, 2011 Report Share Posted October 28, 2011 Epa, eu aconselho-te a treinar algoritmia. Eu quando comecei a programar (o ano passado), os primeiros exercicios eram quase só de algoritmia, para nós aprendermos a pensar quando nos pedem um programa. Software is like sex: It’s better when it’s free. Link to post Share on other sites
emanueloki 0 Posted December 1, 2011 Report Share Posted December 1, 2011 Para fazer um menu, normalmente usa-se um do/while e o respectivo switch case para verificar as opçoes! Link to post Share on other sites
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