Pasaje de arrays a funciones en C++

the_jackal

Lanero Regular
18 May 2005
73
Q tal amigos...

pues el otro dia me pusieron un problema, q era hacer un programa que tuviera un array unidimensional entero, el cual se le introdujera el tamaño q el usario quisiera y luego el usuario lo llenaba con valores introducidos por consola. Luego de esto, el programa debia modificar el array, tal que, cuando se encontrara con un entero que fuera un numero primo par, lo cambiara por 0, y todo lo demas lo cambiara por 1.

Este fue el codigo que hice:

Código:
#include <iostream>
using namespace std;

void leer_datos (int [], int);
int f1 (int []);
bool primo (int &);
void mostrar_datos (const int [], int);

int main ()
{
  int n;
  cout << "Introduzca tamano del vector: ";
  cin >> n;
  int V[n];
  leer_datos(V,n);
  f1(V);
  mostrar_datos(V,n);
  cout << endl;
}

void leer_datos (int V[], int a)
{
  for (int i = 0; i < a; i++)
    {
      cout << "Escribir " << i+1 << " valor: ";
      cin >> V[i];
    }
}

int f1 (int V[])
{
  for (int i = 0; i < (sizeof(V)/sizeof(int)); i++)
    if (primo(V[i]) && !(V[i]%2==0))
      V[i] = 1;

    else if (V[i]%2==0)
      V[i] = 0;
}

bool primo (int &a)
{
  for (int i = 2; i < a; i++)
    {
      if (a%i == 0)
	return true;
    }
  return false;
}

void mostrar_datos (const int V[], int a)
{
  cout << "El vector modificado es: ";

  for (int i = 0; i < a; i++)
    cout << V[i] <<" ";
}

Pero el progrma no cumple su objetivo... y creo q el problema esta aqui:
Código:
int f1 (int V[])
{
  for (int i = 0; i < (sizeof(V)/sizeof(int)); i++)
    if (primo(V[i]) && !(V[i]%2==0))
      V[i] = 1;

    else if (V[i]%2==0)
      V[i] = 0;
}

Creo q es por el pasaje de uno de los elementos del arreglo a la funcion primos... no se si lo habre hecho bien.. por eso quisiera q ustedes, por favor, me pudieran orientar sobre eso..

Gracias de antemano... =)
 
Efectivamente, el unico primo par es el 2, de resto todos son impares. De hecho por eso normalmente las rutinas para encontrar numeros primos empiezan en 3 y se incrementa de a 2 hasta la raiz cuadrada del numero ... o la razi cuadrada - 1 ... no recuerdo bien
 
Compruebe que la función Primo si le esté funcionando bien, ponga algunos Couts para ver que valores está retornando y si está usando un IDE haga debug para que pueda tener mas claridad sobre que está ejecutando la función.
 
Le recomiendo que haga en código "La Criba de Eratóstenes".... es un método fácil de codificar y va sobre seguro. Que desocupados los griegos...
 
Gracias por las respuestas... creo q me equivoque a la hora de plantear el problema.... es el siguiente:
Cuando encuentre un numero par, lo cambie por un 0, y cuando encuentre un numero primo impar lo cambie por 1... de manera q:

numero ingresado: 2 --> cambiado a: 0
3 ---> 1
4 ----> 0
9 ---> 0 (es impar pero no es primo)

El problema se me presenta es a la hora de hacer q la funcion PRIMO calcule si el elemento que le paso del array sea primo o no. Y pues la criba de eratostenes no me sirve, ya q lo que me da son los numeros primos consecutivos que hay hasta sirve numero...
 
Mire a ver si este algoritmo le sirve, ya usted le hace las modificaciones necesarias para su caso en particular.
 

Archivos adjuntos

  • primo.pdf
    18.8 KB · Visitas: 452
Gracias FM static... ya pude resolver el problema...

La funcion PRIMO la modifique y quedo asi:

Código:
bool primo (int &a)
{
 int band = 0;
 
 if ((a == 1) || (a == 2))
    return true;
    
 else
 {
     for (int i = 2; i < a; i++)
     {
         if (a % i == 0)
            band = 1;
     }
 }
 
 if (band == 1)
    return false;
 else
     return true;
}

y asi hace exactamente lo que queria... Gracias
 

Los últimos temas