Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: indict en 24 Enero 2013, 12:19 pm



Título: modificar a la función c++
Publicado por: indict en 24 Enero 2013, 12:19 pm
El siguiente programa me muestra la posición que ocupa el primer valor del vector que es divisible por un entero dado, ¿qué debería modificar para que no me mostrara solamente la primera posición sino todas?

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


bool divisor(vector<int>v,int m){
 int i;
    bool encontrado=false;
    while(i<v.size() and not encontrado){
    if(v[i]%m==0){encontrado=true;}
    else{i++;}}
    return i;}
   
   
int main (){
   
    int n,i=0,e,m;
    cout<<endl<<"Entre el divisor...";
    cin>>m;
    cout << endl << "Entre el número de elementos del vector...";
    cin >> n;
    vector<int> v(n);
    for(i=0;i<n;i++){
                     cout << "Entre el elemento " << i << " del vector...";
                     cin >> e;
                     v[i] = e;}
    cout << endl;
   
    cout<<divisor(v,m)<<endl;
    cout<<endl;
    system("pause");
    return 0;}

¡¡Gracias!!


Título: Re: modificar a la función c++
Publicado por: JavierJV en 24 Enero 2013, 13:17 pm
Lo que queres es que en ves de devolverte el primer numero que es divisible por m (variable), te devuelva todos los divisibles del arreglo?


en la función divisor() , modifica el while para que siga toda la longitud del arreglo, y no pare cuando encuentra el primero y los vas imprimiendo a medida que los encuentras.


Título: Re: modificar a la función c++
Publicado por: flony en 24 Enero 2013, 15:17 pm
en la parte
Código:
while(i<v.size() and not encontrado)
esta de mas
Citar
and not encontrado
propongo una idea alternativa
en esto de programar siempre hay mas de una forma de encarar un problema...si te  sirve para mi seria así...nunca entendí bien bool...prefiero un if  ;) y de while prefiero un for  :silbar:
Código:
#include<iostream>
#include<vector>
using namespace std;


void divisor(vector<int>v,int m)
{
int i;
for (int i = 0; i < v.size(); i++)
{
if (v[i]%m==0)
{
cout<<"el elemento divisibles es: "<<v[i]<<endl;
}

}
}
   
   
int main (){
   
    int n,i=0,e,m;
    cout<<endl<<"Entre el divisor...";
    cin>>m;
    cout << endl << "Entre el numero de elementos del vector...";
    cin >> n;
    vector<int> v(n);
    for(i=0;i<n;i++){
                     cout << "Entre el elemento " << i+1 << " del vector...";
                     cin >> e;
                     v[i] = e;
}
    cout << endl;
    divisor(v,m);
    cout<<endl;
    system("pause");
    return 0;}


Título: Re: modificar a la función c++
Publicado por: leosansan en 24 Enero 2013, 16:29 pm
......................... ¿qué debería modificar para que no me mostrara solamente la primera posición sino todas?

Aunque no le guste el while a flony  ::)  para no cambiarte mucho el código:
Código
  1. #include<iostream>
  2. #include<vector>
  3. #include<cstdlib>/*<==HACE FALTA PARA SYSTEM ¡ ¡ ¡*/
  4. using namespace std;
  5.  
  6.  
  7. bool divisor(vector<int>v,int m){
  8. int i=0;
  9.    bool encontrado=false;
  10.    while(i<v.size() ){
  11.      if(v[i]%m==0)
  12.        cout<<"el elemento divisibles es: v["<<i<<"]= "<<v[i]<<endl;
  13.      i++;
  14.    }
  15. }
  16.  
  17.  
  18.  
  19. int main (){
  20.  
  21.    int n,i=0,e,m;
  22.    cout<<endl<<"Entre el divisor...";
  23.    cin>>m;
  24.    cout << endl << "Entre el número de elementos del vector...";
  25.    cin >> n;
  26.    vector<int> v(n);
  27.    for(i=0;i<n;i++){
  28.                     cout << "Entre el elemento " << i+1<< " del vector...";
  29.                     cin >>v[i];/*<==que es eso de: cin >> e;y luego v[i] = e;*/
  30.                     }
  31.    cout << endl;
  32.  
  33.    cout<<divisor(v,m)<<endl;
  34.    cout<<endl;
  35.    system("pause");
  36.    return 0;}
  37.  
Saluditos!.


Título: Re: modificar a la función c++
Publicado por: indict en 24 Enero 2013, 22:02 pm
¡¡muy buenas explicaciones!! muchas gracias por todas las respuestas y comentarios. :D