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.