Jump to content

Recommended Posts

Posted

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.

Posted

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.

Posted

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!

Posted

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

Posted

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

Posted

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.

Posted

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!

Posted

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

Posted

---

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.

Posted
/*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.

Posted

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!

Posted

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.

Posted

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

😉

Posted
#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?

Posted

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!

Posted

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 ;/

Posted

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);
                        }
               }
       }
}
Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.