Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Cómo hago esta función?

Estas en el tema de Cómo hago esta función? en el foro de C/C++ en Foros del Web. Buenas a todos, Tengo un problema que no sé resolver, espero que me puedan ayudar. Tengo series de 6 numeros, cada serie es diferente. Por ...
  #1 (permalink)  
Antiguo 20/01/2009, 16:27
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Cómo hago esta función?

Buenas a todos,

Tengo un problema que no sé resolver, espero que me puedan ayudar.

Tengo series de 6 numeros, cada serie es diferente.
Por ejemplo en estas series

1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 6 7
1 2 3 5 6 7
1 2 4 5 6 7
1 3 4 5 6 7
2 3 4 5 6 7

He conseguido sacar todas las series que tienen 6 numeros consecutivos
Partiendo que cada valor de la serie es (i1,i2,i3,i4,i5,i6)

Código:
int serie6_correlativa(int i1, int i2, int i3, int i4, int i5, int i6){
		if ((i2==i1+1) && (i3==i2+1) && (i4==i3+1) && (i5==i4+1) && (i6==i5+1)){
			return 0;}
		else{return 1;}
	}
Lo que quiero ahora es identificar todas las series que tengan 5 números correlativos pero en cualquier posición, no tiene porque ser seguidos

Es decir tanto valdría 1 2 3 4 5 9 como 1 9 3 4 5 6
Ambos tienen 5 numeros en orden.

No se como hacerlo!!!

Gracias de antemano
  #2 (permalink)  
Antiguo 22/01/2009, 08:13
Avatar de noxs  
Fecha de Ingreso: enero-2009
Mensajes: 20
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Cómo hago esta función?

hola que tal, bueno espero poder ayudarte,

primero si no entendi mal lo qe preguntas la segunda serie (1 9 3 4 5 6) no tiene 5 correlativos, si es asi propongo esto.
mira yo lo primero qe haria seria pasrlo a un vecto, para poder trabajarlo mejor con punteros despues seria algo asi lo qe haria.

i=j=0;

while (i<=5)

{ while(j<=5)
{
if vec[i] == vec[j + 1]
{cont++; j = 6;}//le pongo 6 a j por qe ya hubo un consecutivo por lo qe
else //no puede haber otro, asi qe salgo
j++;

}//fin while interno

J=0;
i++;
}//fin funcion


desp lo unico qe qedaria es ver si el contador (cont) es 5 si es 5 ya tenes la serie con los correlativos.

Bueno espero qe halla servido, despues avisanos si te funciono.
  #3 (permalink)  
Antiguo 22/01/2009, 08:14
Avatar de noxs  
Fecha de Ingreso: enero-2009
Mensajes: 20
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Cómo hago esta función?

donde dice // fin funcion es el final de primero while
  #4 (permalink)  
Antiguo 22/01/2009, 11:10
Avatar de noxs  
Fecha de Ingreso: enero-2009
Mensajes: 20
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Cómo hago esta función?

debe haber otras soluciones por ahy, pero eso fue lo mas facil qe se me ocurrio, y creo qe lo mas sencillo para poder explicarlo por aca, si ahi algo qe no entesdes preguntame, no ahi ningun problema, espero qete halla servido para solucionar tu problema.

saludos
  #5 (permalink)  
Antiguo 23/01/2009, 22:05
Avatar de cesmichael  
Fecha de Ingreso: julio-2008
Mensajes: 207
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Cómo hago esta función?

Bueno creo que esta es la respuesta

En primer lugar he considerado que los 6 o varios numeros (10 en el programa) estan alamcenados en el vector. Si es uqe tu no estas trabajando asi te recomiendo que lo hagas.

Bueno supongamos que tengamos esta serie de 10 numeros:

1 2 3 4 5 6 7 8 9 10

Lo que el programa hace es encontrar todas las series de 5 numeros correlativos que puedan haber. Es decir el program encontrara estas series:

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
6 7 8 9 10

En total el programa encuentra 6 series. Yo pienso que esto lo que buscas. ahora si lo que quieres es encontrar series disjuntas (que no tenga elementos en comun) la situación es mucho más fácil. En todo caso el programa tendria que encontrar las siguientes series:

1 2 3 4 5
6 7 8 9 10

Un total de dos series. Pero mi program hace el enfoque mas difícil, poruqe pense que ese era el que tu necesitabas. Bueno de todas formas trate de ayudar si es que no pude resolver tu problemas. Creo que mdificando alguans cosas podras realizar el programa de acuerdo al segundo enfoque.

Bueno aca dejo el codigo

Código:
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#define N 10

void Llenar(int V[N]);
void Mostrar(int V[N]);
void Funcion_Corr(int V[N]);

int main()
{
 int Serie[N];
 //Llena el vector
 Llenar(Serie);
 //Muestra el vector
 Mostrar(Serie);
 //Muestar el numero de series correlativos de 5 numeros
 //encontradas en el vector
 Funcion_Corr(Serie);

      system("PAUSE");
      return 0;
}

void Llenar(int V[N])
{
 int i=0;
 cout<<"\tIntrodusca los elementos: \n\n";
 while(i<N)
 {
  cout<<"\tNumero["<<i+1<<"]: ";
  cin>>V[i];
  i++;
 }
}

void Mostrar(int V[N])
{
 cout<<"\n\tSERIE\n\n";
 for(int i=0;i<N;i++)
 {
  cout<<V[i]<<" ";
 }
}

//Detecta una serie de 5 numeros correlativos
void Funcion_Corr(int V[N])
{
 int i=0;
 int contN=1, contS=0;
 while(i<N)
 {
  if(contN<5)
  {
   if(V[i+1]==(V[i]+1))
   {
    //si detecta numeros correlativos aumenta el contador de numero en 1
    contN++;
   }
   else{
    //Sino el contador lo pone en cero
    //no importa si ya esta en cero o el contador tien otro valor
    //Es para volver a buscar la serie de 5 numeros
    contN=1;
   }
  }
  else{
   //si el contador llega a 5
   contS++;//aumenta en 1 el numero de series encontradas
   contN--;//vuelve a disminuir el contador para encontrar otra serie
   i--;//disminuye el contador para volver a comparar el ultimo numero de la ultima serie encontrada
  }
  i++;
 }
 cout<<"\nTotal de series de 5 numeros: "<<contS<<endl;
}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:13.