modificar a la función c++

Iniciado por indict, 24 Enero 2013, 12:19 PM

0 Miembros y 1 Visitante están viendo este tema.

indict

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?

#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!!

JavierJV

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.

flony

#2
en la parte
while(i<v.size() and not encontrado)
esta de mas
Citarand 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:
#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;}
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leosansan

Cita de: indict en 24 Enero 2013, 12:19 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 (cpp) [Seleccionar]
#include<iostream>
#include<vector>
#include<cstdlib>/*<==HACE FALTA PARA SYSTEM ¡ ¡ ¡*/
using namespace std;


bool divisor(vector<int>v,int m){
int i=0;
    bool encontrado=false;
    while(i<v.size() ){
      if(v[i]%m==0)
        cout<<"el elemento divisibles es: v["<<i<<"]= "<<v[i]<<endl;
      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+1<< " del vector...";
                     cin >>v[i];/*<==que es eso de: cin >> e;y luego v[i] = e;*/
                     }
    cout << endl;

    cout<<divisor(v,m)<<endl;
    cout<<endl;
    system("pause");
    return 0;}

Saluditos!.

indict

¡¡muy buenas explicaciones!! muchas gracias por todas las respuestas y comentarios. :D