Bem-vindo ao Fórum!

Registre-se agora mesmo e fique por dentro da maior comunidade de Cheats do Brasil!

trowv

somar um conjunto de varios elementos, por uma variavel de N Algarismos

Recommended Posts

Olá pessoal ficando com cabelo branco kk estou procurando  um jeito de resolver no delphi   ou como é nome desse processo  fica mais fácil pra procurar uma solução depois caso não encontre nenhum código no delphi , preciso adaptar  isso , mas não sei qual melhor solução para fazer isso, não sei nem como  inserir os loops  e contadores  é meio complicado pra explicar tentei então ser o mais simples possivel nas palavras e coloquei essa dúvida no pdf
Não precisa ser código completo, apenas pra algo  ter uma luz para onde seguir, agradeçido a quem poder dar uma ajuda



 

 

xxxxxxxxxxxxxxx.pdf

Share this post


Link to post
Share on other sites

Problema interessante, porém não entendi especificamente a sua dúvida. Portanto, vou te dizer como eu resolveria esse problema.

Pensei em dois jeitos, um é matemático, independente de linguagem, o outro talvez a linguagem não tenha suporte ao que vou dizer.

Sobre o problema do array variável, use

.

Matematicamente, dá pra pegar os algarismos de um número fazendo operações sucessivas relacionadas a multiplicidade de cada algarismo (unidade, dezena, centena, etc.).

131151735281 Mod 10 = (1 - 0) / 1 = 1
131151735281 Mod 100 = (81 - 1) / 10 = 8
131151735281 Mod 1000 = (281 - 81) / 100 = 2
...
131151735281 Mod 1000000000000 = (131151735281 - 31151735281) / 100000000000 = 1

Faz isso até que o resultado do resto seja igual a própria variável, daí só se executa mais uma iteração para o algarismo de maior ordem, que ficaria de fora do loop.

O outro modo é converter a variável inteira em uma string, que por definição é um array de chars , e depois copiar esse array para um array de inteiros.

Vou colocar o modo matemático em C aqui só pra te dar uma ideia porque não sei Pascal, mas vou ver se conheço alguém que sabe pra me ajudar daí eu coloco aqui depois pra ti.

Pensei em tudo rapidinho, só pra te dar uma resposta, então nem o método, nem o código estão aquela coisa. Se parar pra analisar direitinho, deve dar pra melhorar muita coisa.

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int initial_year = 1958;
	int last_year = 2019;

	long long var = 131151735281;
	int *var_array = NULL; // Para o realloc funcionar como malloc no C, deve-se inicializar o ponteiro com NULL.
	int var_array_size = 0;

	long long current_result = 0, last_result = 0, multiplier = 10;
	while ((current_result = var % multiplier) != var)
	{
		var_array = (int*)realloc(var_array, (var_array_size + 1) * sizeof(int));
		var_array[var_array_size] = (current_result - last_result) / (multiplier / 10); // Vai gerar um array ao contrário.
		last_result = current_result;
		multiplier *= 10;
		var_array_size++;
	}

	// Executa mais uma 'iteração' manualmente para o último algarismo.
	var_array = (int*)realloc(var_array, (var_array_size + 1) * sizeof(int));
	var_array[var_array_size] = (current_result - last_result) / (multiplier / 10);
	var_array_size++;

	while (initial_year != last_year)
	{
		// Percorre o array de trás para frente.
		for (int i = (var_array_size - 1); i >= 0; i--)
		{
			// Checa se a soma não vai ultrapassar o ano desejado.
			if (initial_year + var_array[i] <= last_year)
			{
				printf("%d + %d = %d\n", initial_year, var_array[i], initial_year + var_array[i]);
				initial_year += var_array[i];
			}
		}
	}

	getchar();

    return EXIT_SUCCESS;
}

fmOTnr8.png
Resultado obtido

Edited by TheSkytalos
Erro ortográfico
  • Like 1

"May you be in heaven half an hour before the Devil knows you're dead"

Share this post


Link to post
Share on other sites

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