Ir ao conteúdo
  • Cadastre-se
Ronimar

Dúvida na Elaboração de uma Logica de Soma em C

Recommended Posts

Ola pessoal bom dia.Estou com duvida em resolver a seguinte situação problema .Logo em baixo vou postar o codigo fonte de até onde eu fiz

 

 

 

Alguem poderia por favor me ajudar a resolver?

 

post-729888-0-34215000-1413434108_thumb.

#include <stdio.h>#include <stdlib.h>int main(){int i,seq1[4],seq2[4];float soma1=0,soma2,soma3,soma4 ;printf("Digite os numeros da primeira sequencia: \n ");for(i=0;i<4;i++){                 printf("\nnumero %d sequencia 1: ",i+1);                 scanf("%d",&seq1[i]);                  }                 printf("Digite os quatro numeros da segunda sequencia: \n");for(i=0;i<4;i++){                 printf("nnumero %d sequencia 2: \n",i+1);                 scanf("%d",&seq2[i]); }for(i=4;i<=0;i++)  {           soma1 = seq1[i] + seq2[i];                  if(soma1 >9)            {                     soma2 = seq2[i] +1;                    }      soma2 = soma2 + seq1[i] + seq2[i];                              if(soma2 >9)            {                     soma3 = seq2[i] +1;                    }          soma3 = soma3 + seq1[i] + seq2[i];                 if(soma3 >9)            {                     soma3 = seq2[i] +1;                    }             soma4 = soma4 + seq1[1] + seq2[1];                               if(soma4 >9)            {                     soma4 = seq2[i] +1;                    }                        } printf("A soma será %f",soma1,soma2,soma3,soma4);   system("PAUSE");   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok!
Você tem em mente que o vetor de inteiro com 4 inteiros, sedo que cada espaço desse vetor armazena um digito (decimal)
da parcela de 4 dígitos, limite máximo de casa casa é 0 ou 9.

Visualizou assim;

intenda abaixo Casa como sendo, dígito:

 

Casas das Milhares   |Casa das Centenas   |Casa das Dezenas   |Casa das unidades
parcela[3]                    parcela[2]                    parcela[1]                  parcela[0]

 

Assim sendo se eu preencher:

  1. parcela[0] = 1;
  2. parcela[1] = 2;
  3. parcela[2] = 3;
  4. parcela[3] = 4;

tenho na verdade: 4321 (4 mil trezentos e vinte um);

Exemplo:

 

parcela[0] = 9;
parcela_2[0] = 1;

soma?

 

temp = parcela[0] + parcela_2[0]

temp = 10;

 

soma[0] = 0; //Unidade

soma[1] = 1; // Dezenas

 

Qual a sua dúvida exatamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma forma simples de resolver é multiplicando a soma dos índices pela posição de unidade, dezena, etc

    for(i = 3; i >= 0; i--){        switch(i){            case 3: aux = 1;break;            case 2: aux = 10;break;            case 1: aux = 100;break;            case 0: aux = 1000;break;        }               soma += (vet1[i] + vet2[i]) * aux;

O código pode mais ser refinado, iniciando aux com 1 e deixando o loop assim apenas

    for(i = 3; i >= 0; i--){        soma += (vet1[i] + vet2[i]) * aux;        aux *= 10;    }    

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mauro Britivaldo 

 

eu preciso resolver essa situação problema da imagem

 

Preciso Somar Unidade com Unidade , Dezena com Dezena ,Centena Com centena e unidade de milhar com Milhão tipo 

 

                        9 8 7 6

                    +

                        4 3 2 1

 

mas porém quando eu fizer 8 + 3 = 11 preciso deixa o 1 elevar 1 a unidade de milhar


Uma forma simples de resolver é multiplicando a soma dos índices pela posição de unidade, dezena, etc
 

    for(i = 3; i >= 0; i--){        switch(i){            case 3: aux = 1;break;            case 2: aux = 10;break;            case 1: aux = 100;break;            case 0: aux = 1000;break;        }               soma += (vet1[i] + vet2[i]) * aux;

O código pode mais ser refinado, iniciando aux com 1 e deixando o loop assim apenas

    for(i = 3; i >= 0; i--){        soma += (vet1[i] + vet2[i]) * aux;        aux *= 10;    }    

 

 

Da uma olhada até onde implementei suas dicas , mas ainda não consegui

#include <stdio.h>#include <stdlib.h>int main(){int i,seq1[4],seq2[4];float soma=0,soma2,soma3,soma4,aux=0 ;printf("Digite os numeros da primeira sequencia: \n ");for(i=0;i<3;i++){                 printf("\nnumero %d sequencia 1: ",i+1);                 scanf("%d",&seq1[i]);                  }                 printf("Digite os quatro numeros da segunda sequencia: \n");for(i=0;i<4;i++){                 printf("nnumero %d sequencia 2: \n",i+1);                 scanf("%d",&seq2[i]); }for(i = 3; i >= 0; i--){        soma += (seq1[i] + seq2[i]) * aux;        aux *= 10;                printf("A soma será %f " ,soma);    }}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ronimar

OK!

É muito bom esse exercício.

Não sei se você ja resolveu ele, há essa altura,

contudo,  segue abaixo uma maneira própria de resolver.

Ate+!

/* Simula o sistema decimal poli(4) decimais** SOMA: Milhas, Centenas, Dezenas, Unidades restrito a 3 vetores** com valores inteiros no limite de 0 - 9** @parâmetro int[4], int[4], int[4], dentro do limite *0** @retorna nada** @autor Mauro Britivaldo (email: britivaldo@gmail.com);*/void SOMA(int setPar[4], int setPar2[4], int setSoma[4]){    const char extra = 1;    const char maxx = 9;    int i;    for(i = 4 -extra; i >= 0 ; i--)    {  if( (setPar[i] + setPar2[i]) <= maxx)        {            setSoma[i] += setPar[i] + setPar2[i] ;        }        else        {   if(!i){printf("\n\n****Estourou a memoria****\n\n");                setSoma[i] = maxx; return;}            setSoma[i] += (setPar[i] + setPar2[i]) -maxx -extra;            setSoma[i -extra] += extra;        }    }}/* Simula o sistema decimal poli(4) casa decimais** Imprimi seus valores na saída padrão ou, retorna o valor decimal;** ao limite de 0 - 9** @parâmetro int[4] dentro do limite e maiores que 0*** @retorna int** @autor Mauro Britivaldo (email: britivaldo@gmail.com);*/int prntSoma(const int soma[4], char pGet){    int i;    const char maxx = 4;    const char extra = 1;    if(pGet)    for(i = 0; i < maxx; i++)    {        printf("\t%d" ,soma[i]);    }    else    {        int i_soma = 0;        int d = 1;                for(i = maxx -extra; i >= 0; i--)        {   i_soma += soma[i] * d;            d *= 10;        }        return i_soma;    }return pGet;}/* função principal e chamadora */int main(void){    //Exemplo Teste"    int parcela[4] =  {1,9,1,9}; /*  1919 Primeira Parcela*/    int parcela2[4] = {2,0,1,9}; /* +2019 Segunda Parcela */    int soma[4] =     {0};       /* ------                                 /*  3938'                */    //Aqui Começa a Magia    SOMA(parcela, parcela2, soma);    //Saída dos Resultados...    printf("Print Unidade a Unidade\n");    printf("\t#Mil\t#Cent\t#Dez\t#Uni\n");    printf("Valor: ");    prntSoma(soma, 1);    printf("\n\nPrint Decimal\n");    printf("Inteiro decimal: %d", prntSoma(soma,0));    printf("\n\n\n");    //FIM.    //getchar();return 0;}

Compartilhar este post


Link para o post
Compartilhar em outros sites

No primeiro for, altere i<3 para i<4. Igual está no segundo for

Além disso você deve atribuir 1 a variável aux (aux=1) e não zero.

 

Consegui Resolver

olliver.soul

 

Mais porém ainda estou com duvida em entender a seguinte parte.Voc~e me explicaria cada passo do algoritimo , não entendi porque a variavel auxiliar ta multiplicando por 10 .Muito Obrigado por estar me ajudando.

   for(i = 3; i >= 0; i--){        soma += (vet1[i] + vet2[i]) * aux;        aux *= 10;    } 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ronimar, vamos pegar como exemplo o valor 9876.

A posição correspondente de cada algarísmo determina se é unidade, dezena, centena, unidade de milhar, etc

Como o nosso sistema numérico é base dez, contamos de 10 em 10 e cada uma dessas posições (da direita para a esquerda) é sempre 10 vezes maior que a anterior. Logo, temos que:

9876 = (9 * 1000) + (8 * 100) + (7 * 10) + 6

E se você usar potência de 10 fica 9*10^3 + 8*10^2 + 7*10^1 + 6*10^0

Portanto a operação que o código faz é essa:

9876 = (9 * 1000) + (8 * 100) + (7 * 10) + 6

+ 4321 = (4 * 1000) + (3 * 100) + (2 * 10) + 1

------------------------------------------------

14197 = (13 * 1000) + (11 * 100) + (9 * 10) + 7

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×