Ir ao conteúdo
  • Cadastre-se

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


Ronimar

Posts recomendados

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");   }
Link para o comentário
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?

Link para o comentário
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;    }    
Link para o comentário
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);    }}
Link para o comentário
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: [email protected]);*/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: [email protected]);*/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;}
Link para o comentário
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;    } 
Link para o comentário
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

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...