xcarlos2 Posted November 8, 2008 at 09:43 PM Report #224302 Posted November 8, 2008 at 09:43 PM Olá...sou novo neste forum e a programar.... tenho um exercicio para entregar...mas estou bloqueado!! consiste nisto: o utilizador introduz um numero inteiro...e o compliador mostra todas as somas possiveis com 3 parcelas . ex: introduza um numero: 12 as somas possiveis sao 1+2+9, 1+3+8..etc. nao quero o codigo...apenas quero uma dica...porque ainda nao consegui chegar la no raciocionio do programa.. o que pensei incialmente é nas condicoes if else apenas... dentro do DO While soma = a+b+c... Obrigado.
pedrotuga Posted November 8, 2008 at 09:49 PM Report #224303 Posted November 8, 2008 at 09:49 PM São muitas somas digo-te desde já. Ora bem... começa por somas que incluam o número 1, o 2 e o restante para completar o teu numero inserido. Depois 1+3+x. depois 1+4+y, depois 1+4+... quanto já não tiveres mais começa no 2 2+2+... 2+3+... 2+4... depois começa no 3 3+3+.. 3+4+.... Basicamente tens que fazer dois ciclos, um dentro do outro... o primeiro varre a primeira parcela, o segundo, dentro do primeiro, varre a segunda, clacula a terceira e mostra-a no ecrã. Penso que seja isto que queres... já deve ajudar-te a começar.
anolsi Posted November 8, 2008 at 09:52 PM Report #224304 Posted November 8, 2008 at 09:52 PM Não sei é se precisas de ter em atenção que 1 + 2 + 8 = 1 + 8 +2 Ou seja à posição dos valores, não sei se tens que apresentar estas ou não. Caso não reduzes muitas somas a apresentar. "Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."Não respondo a questões por PM que possam ser colocadas no fórum!
xcarlos2 Posted November 8, 2008 at 09:55 PM Author Report #224305 Posted November 8, 2008 at 09:55 PM é verdade existe mais essa condicao...ou seja nao pode haver parcelas repetidos ex:1 + 2 + 8 = 1 + 8 +2.... e como penso que nao é possivel atravez desse tipo de ciclos se 1+2+8 ja foi utilizado com 8+2+1 ou 2+1+8.
pedrotuga Posted November 8, 2008 at 09:57 PM Report #224306 Posted November 8, 2008 at 09:57 PM É possível, só tens que conferir se o trio já existe. Penso que é a dica do exercício para implemtares uma pequena função para fazer isso mesmo.
xcarlos2 Posted November 8, 2008 at 10:47 PM Author Report #224311 Posted November 8, 2008 at 10:47 PM outra nota:: o numero inteiro é positivo logo >=0 nao sei se com condicoes vou la ..porque as parcelas podem ser 999+998+997 ou 333333+333334+333335 etc. nao sei se isto nao envolve matrizes!!!
pedrotuga Posted November 8, 2008 at 11:17 PM Report #224316 Posted November 8, 2008 at 11:17 PM Eu, e julgando pela resposta, o anolsi tambem, assumimos que estavas a falar de números naturais, de outra forma tens um número de soluções infinitas. Não são precisas matrizes para nada neste problema. O método já referido funciona. Não te atires logo de cabeça para números como esses que acabaste de mostar, isso vai gerar um número de resultados enorme. Começa com números pequenos, para efeitos de teste do algoritmo é rigorosamente a mesma coisa.
pmg Posted November 8, 2008 at 11:30 PM Report #224321 Posted November 8, 2008 at 11:30 PM Se não podes ter repetição de somas, isto é, se apresentas só uma dentre "1+2+8", "1+8+2", "2+1+8", etc. podes fazer a primeira parcela <= segunda parcela <= terceira parcela. Isto é mais ou menos o mesmo que disse o pedrotuga, só com outro aspecto Se fizeres isto a primeira parcela nunca é maior que número / 3. Vais variando a primeira parcela entre 1 e o limite a segunda parcela nunca é maior que (número - primeira parcela) / 2; vais variando a segunda parcela entre o limite inferior e o limite superior e calculas a terceira parcela Se podes ter repetição, o código até fica mais simples 😉 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!
xcarlos2 Posted November 8, 2008 at 11:33 PM Author Report #224324 Posted November 8, 2008 at 11:33 PM São muitas somas digo-te desde já. Ora bem... começa por somas que incluam o número 1, o 2 e o restante para completar o teu numero inserido. Depois 1+3+x. depois 1+4+y, depois 1+4+... quanto já não tiveres mais começa no 2 2+2+... 2+3+... 2+4... depois começa no 3 3+3+.. 3+4+.... Basicamente tens que fazer dois ciclos, um dentro do outro... o primeiro varre a primeira parcela, o segundo, dentro do primeiro, varre a segunda, clacula a terceira e mostra-a no ecrã. Penso que seja isto que queres... já deve ajudar-te a começar. --- mas este racicionio seria possivel apenas se fosse para algarismos ate 9. ou seja quando chegasse ao 9, passaria o b a aumentar. e c seria sempre a diferenca entra a soma com a+b
pedrotuga Posted November 8, 2008 at 11:39 PM Report #224327 Posted November 8, 2008 at 11:39 PM --- mas este racicionio seria possivel apenas se fosse para algarismos ate 9. ou seja quando chegasse ao 9, passaria o b a aumentar. e c seria sempre a diferenca entra a soma com a+b Sim, é precisamente isso, mas não estou a perceber porque é que dizes que só é possível para algarismos até 9, isto funciona para qualquer número natural.
xcarlos2 Posted November 9, 2008 at 12:08 AM Author Report #224330 Posted November 9, 2008 at 12:08 AM /*exerc 28)*/ #include <stdlib.h> #include <stdio.h> int main() { system("chcp 1252"); int soma, a, b, c; printf("Introduza um Número Inteiro Positivo: "); scanf("%d", &soma); while ( a<=soma-3){ a=a++ ; } while (b < a ) { b=b++ ; } c = (soma - (a + b)); printf("as somas possiveis: %d + %d + %d\n",a,b,c); system ("PAUSE"); return 0; } fiz assim...e nao esta a funk!!! da me valores estranhos!! e sempre os mesmos.
pmg Posted November 9, 2008 at 12:18 AM Report #224333 Posted November 9, 2008 at 12:18 AM Não inicializaste as variáveis `a` e `b`. A instrução "a=a++;" (e "b=b++;") não faz grande sentido. a++ soma 1 a `a` e devolve o número anterior. Tu pegas nesse número anterior e mete-lo em `a` outra vez!!! Essa construção (a=a++) representa o "Undefined Behaviour" e portanto o compilador pode fazer o que quiser com ela. Tens sorte que no teu caso, aparentemente, ele decidiu tratá-la como um simples "a++;". Para o teu programa começar a fazer qualquer coisa que se veja tens que por o b "dentro" do a, e o c "dentro" do b. Tenta melhorar a tua indentação. É mais fácil perceber o programa com um indentação consistente. 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!
pedrotuga Posted November 9, 2008 at 12:21 AM Report #224334 Posted November 9, 2008 at 12:21 AM Não percebi nada do teu código, desculpa :s Tens que fazer uma coisa deste tipo: for(a=1;a<(soma-1);a++){ for(b=a;b+a<soma;b++){ c=soma-(a+b); printf("[%d + %d p %d]\n",a,b,c); } } falta antes do printf() verificares se o trio existe ou não.
xcarlos2 Posted November 9, 2008 at 12:24 AM Author Report #224335 Posted November 9, 2008 at 12:24 AM Ok Obrigado pela dica. tens razao... isto foi feito muito a pressa. vou fazer com mais calma...mas amanha..pois estou des de as 11h dwe volta nisto. e apenas agora com a vossa ajuda avancei no sentido certo. obrigado a todos e boa noite. amanha dou o feedback do resultado. Valeu!! 😉
xcarlos2 Posted November 9, 2008 at 12:37 PM Author Report #224370 Posted November 9, 2008 at 12:37 PM #include <stdlib.h> #include <stdio.h> int main() { system("chcp 1252"); int soma, a=0, b=1, c; printf("Introduza um Número Inteiro Positivo: "); scanf("%d", &soma); while (a<(soma-3)){ a++; if(b=a ) b++; { c = soma - (a+b); printf("[%d + %d + %d]=%d \n",a,b,c,soma); } } system ("PAUSE"); return 0; } assim está correctamento indentado?
pmg Posted November 9, 2008 at 01:00 PM Report #224376 Posted November 9, 2008 at 01:00 PM A indentação é uma ajuda para os programadores. Para o compilador não há diferença nenhuma no número de espaços ou TABs ou ENTERs que estão no código: portanto não há indentações correctas e incorrectas. O valor da indentação é subjectivo. Mas ... há milhentos anos (bem ... praí 40) que se escreve código em C e há uns poucos estilos de indentação adoptados por grande parte dos programadores. Se te conseguires adaptar a um desses estilos (tanto para ler código de outros programadores, como para outros programdores lerem o teu código) é melhor para toda a gente. O importante é usares um estilo que gostes (adoptado por muita gente ou não) e usá-lo consistentemente. http://en.wikipedia.org/wiki/Indent_style http://en.wikipedia.org/wiki/Programming_style 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!
Ribamar Posted November 12, 2008 at 12:50 AM Report #224977 Posted November 12, 2008 at 12:50 AM nem por isso. que editor usas?
eMineiro Posted November 12, 2008 at 05:54 PM Report #225097 Posted November 12, 2008 at 05:54 PM Incializa a,b com 1, faça exatamente esse whiles com a condição de que a e b só andam até a soma-2. Para toda vez que C for diferente > 0, imprima a,b,c na tela. #include <stdio.h> main(){ int a,b,c,soma,aux; printf("Digite o número: "); scanf("%d",&soma); for(a=1;a<=soma-2;a++){ for(b=1;b<=soma-2;b++){ c = soma - (a+b); if(c > 0){ printf("%d + %d + %d\n",a,b,c); } } } } Pena que esse código nao quer identar ;/
eMineiro Posted November 12, 2008 at 06:22 PM Report #225112 Posted November 12, 2008 at 06:22 PM Tomei a liberdade de editar do código do amigo pedrotuga e fiz assim: #include <stdio.h> main(){ int a,b,c,soma; printf("Digite o número: "); scanf("%d",&soma); for(a=1;a<(soma-2);a++){ for(b=a;b+a<soma;b++){ c=soma-(a+b); if(c>=b){ printf("[%d + %d p %d]\n",a,b,c); } } } }
xcarlos2 Posted November 13, 2008 at 08:31 PM Author Report #225462 Posted November 13, 2008 at 08:31 PM Olá a todos.. 🙂 obrigado pela dica... consegui fazer atravez do comando while com 2 cilos.. mas agora tou a tentar faze lo com um menu,,, e da me erro no else..nao consigo perceber porque.. alguem me pode ajudar . obrigado. /*variavel do program...com menu */ #include <stdlib.h> #include <stdio.h> int main() { system("chcp 1252"); printf("\n\n\n"); int a = 1, b = 0, c, num, count=1; char opcao; printf("Este programa apresenta todas as somas possiveis, sem repeticoes\n"); printf("para um determinado numero inteiro e positivo, bem como,\n"); printf("calcula o numero de operações possiveis.\n\n\n"); printf("Menu\n\n"); printf("Escolha uma das seguintes opções\n"); printf(" 1 Para continuar\n"); printf(" 2 Para sair\n"); if (scanf("%c", &opcao)=='1'){ printf("Introduza um numero inteiro e positivo\n\n"); scanf("%d", &num); c= num-(a+b); for (a=1; a<c; a++) { for (b=a+1; b<c; b++) { c=num-(a+b); if (b<=c) printf ("\n %d-> %d + %d + %d = %d", count, a, b, c, num); count+=1; } } printf("n\rNumero total de somas possiveis %d\n\n", count-1); } else (scanf("%c", &opcao)=='2') ; break; system ("PAUSE"); return 0; }
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