Jump to content
Fórum Script Brasil
  • 0

Percorrer dois array com início distintos


Question

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 to post
Share on other sites

2 answers to this question

Recommended Posts

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

 

Edited by britivaldo
Link to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148691
    • Total Posts
      644531
×
×
  • Create New...