Ir para conteúdo
Fórum Script Brasil
  • 0

Percorrer dois array com início distintos


ARSaraiva

Pergunta

Olá pessoal, estou com dificuldades em fazer um comando de repetição de dois array inicia em momentos distintos. O que eu estou tentando fazer é o seguinte: tenho um array de 7 posições onde os índices 0, 1 e 3 são true e os demais são false. Tenho o segundo array de 13 posições, onde os elementos 0,1,3 e 9 são true o o restante false. O array menor sempre repete até o número de elementos do maior. Na primeira iteração os dois arrays iniciam no mesmo momento,  e são comparados se os índices dos dois array são true, assim tenho a seguinte saída:

Array menor: 0123456012345

Array maior: 0123456789101112

É possível ver que os índices 0, 1 e 3 de cara são iguais para ambos os array, mais o índice 3 do menor coincide com o 9 do maior. Neste caso tenho como saída 4 encontros. Até aqui o código está funcionando bem, o problema é que na segunda iteração o array maior deveria iniciar quando o menor estiver no índice 1, na terceira iteração o maior deveria iniciar quando o menor estiver no índice 2 e assim por diante até terminar todos os índices do menor.

Segue o código da primeira parte e da tentativa da segunda:

#include <iostream>
#include <stdio.h>

using namespace std;


int Verifica(int inimenor, int inimaior){
    bool padrao_menor[7] = { 0 };
	bool padrao_maior[13] = { 0 };
	padrao_menor[0] = padrao_menor[1] = padrao_menor[3] = {1};
	padrao_maior[0] = padrao_maior[1] = padrao_maior[3] = padrao_maior[9] = {1};
	int slot_menor = 0;
	int slot_maior = 0;
	int encontro = 0;
	if (inimenor == inimaior){
	for (int i = 0; i <= 50; i++) {
            if ((slot_menor >= sizeof(padrao_menor)-1) or (slot_maior >= sizeof(padrao_maior)-1)) {
                if (slot_menor >= sizeof(padrao_menor)-1) {
                    slot_menor = 0;
                }
                else {
                    slot_maior = 0;
                }
            }
            else {
                if ((padrao_menor[slot_menor] == true) and (padrao_maior[slot_maior] == true)) {
                    encontro++;
                    printf("Slot Menor %d, Slot Maior %d", slot_menor, slot_maior);
                    printf("\n");
                    slot_menor++;
                    slot_maior++;
                }
                else {
                    slot_menor++;
                    slot_maior++;
                }

            }
	}
	}else{
        for (int i = 0; i <= 50; i++) {
                printf("Valor do I %d\n", i);
            if ((slot_menor >= sizeof(padrao_menor)-1) or (slot_maior >= sizeof(padrao_maior)-1)) {
                if (slot_menor >= sizeof(padrao_menor)-1) {
                    slot_menor = 0;
                }
                else {
                    slot_maior = 0;
                }
            }
            else {
                if ((padrao_menor[slot_menor] == true) and (padrao_maior[slot_maior-1] == true)) {
                    encontro++;
                    printf("Slot Menor %d, Slot Maior %d", slot_menor, slot_maior);
                    printf("\n");
                    slot_menor++;
                    slot_maior++;
                }
                else {
                    slot_menor++;
                    slot_maior++;
                }

            }
	}
	}
	return encontro;
}

int main()
{
    int ini_menor = 0;
	int ini_maior = 0;
	int retorno = 0;
	int para = 0;
    while (para != 50){
       retorno = Verifica(ini_menor,ini_maior);
       printf("Total de Encontros sem Offset: %d\n", retorno);
       ini_maior++;
       para++;
    }
    }

Alguém poderia ajudar com essa lógica? Desde já agradeço.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 1

@ARSaraiva Bom Dia.

Seu problema não é de linguagem e sim de lógica. O que você precisa é calcular o módulo do índice em um ou em ambos os vetores simulando sua restrição de alcance (range).

 

Exemplo

// INCLUSOES
#include <iostream>
// using namespace std;

// main ---Função principal do programa
int main(void)
{
 	int my_array0 [5] = {0 , 1 , 2 , 3 , 4 ,};
	int my_array1 [9] = {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,};
  
	for (int index = 0 ; index < 10 ; ++index)
    	{	std::cout <<(my_array0 [index%5])<<(my_array1 [index%9])<<(" , "); }
	std::cout <<("\b\b ")<< std::endl;
  
	return 0;
}
	

 

Editado por britivaldo
Link para o comentário
Compartilhar em outros sites

  • 0
20 horas atrás, britivaldo disse:

@ARSaraiva Bom Dia.

Seu problema não é de linguagem e sim de lógica. O que você precisa é calcular o módulo do índice em um ou em ambos os vetores simulando sua restrição de alcance (range).

 

Exemplo


// INCLUSOES
#include <iostream>
// using namespace std;

// main ---Função principal do programa
int main(void)
{
 	int my_array0 [5] = {0 , 1 , 2 , 3 , 4 ,};
	int my_array1 [9] = {0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ,};
  
	for (int index = 0 ; index < 10 ; ++index)
    	{	std::cout <<(my_array0 [index%5])<<(my_array1 [index%9])<<(" , "); }
	std::cout <<("\b\b ")<< std::endl;
  
	return 0;
}
	

Obrigado Britivaldo, consegui graças a sua sugestão. 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...