Opinad

Iniciado por cNoob, 18 Junio 2016, 12:08 PM

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

cNoob

Hola!
He hecho un simple programa el cual genera números aleatorios, pero antes tu le indicas un numero que ha de buscar en la lista de números aleatorios, la cantidad de veces que debe buscarlo y el "rango" de números que genera (podríamos decir que lo que tu introduces es arco y luego hace lo siguiente: rand()%arco ).Y bueno, debido a mi poca experiencia programando estaría que me dieseis vuestra opinión y tips para mejorarlo.
Gracias :D

Código (cpp) [Seleccionar]

//HECHO POR CNOOB
//18 DE JUNIO DE 2016

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int Errores(bool error,int numero,int veces,int arco);
void Errores2(int errores2);

int main (){

    srand(time(0));
    int numero;
    int veces;
    int arco;
    int x;
    int y=1;
    int i=0;
    int posiciones[i];
    int z=0;
    double h;
    bool error;

    cout << "Numero que se busca: ";
    cin >> numero;
    cout << "Veces que se buscara: ";
    cin >> veces;
    cout << "Rango de numeros (0-x): ";
    cin >> arco;
    cout << endl;

    error=Errores (error,numero,veces,arco);


    if(error==false){
    while(i<veces)
    {
        x=(rand()%(1+arco));
        cout << y << "    " << x << endl;
        cout << "                     Busqueda: " << (1+i) << endl;
        ++y;
        if(x==numero){
            cout << endl;
            cout << "STOP" << endl;
            cout << "Busqueda " << 1+i << "." << endl;
            cout << endl;
            cout << endl;
            ++i;
            z += (y-1);
            y=1;
        }
    }


    h = (z/veces);

    cout << "Numero buscado: " << numero << endl;
    cout << "Veces que se ha buscado: " << veces << endl;
    cout << "Rango de numeros generado: " << arco << endl;
    cout << endl;
    cout << "Media de posiciones en las que se encontro el " << numero << " ->  "<< h << endl;

    Errores2 (h);

    cout << endl;
    }

    system ("PAUSE");
    return 0;
}

int Errores(bool error,int numero,int veces,int arco)
{
    error=false;

    if(numero<0){
        cout << "ERROR!" << endl;
        cout << "No se pueden buscar numeros negativos." << endl;
        cout << endl;
        error=true;
    }

    if(veces<=0){
        cout << "ERROR!" << endl;
        cout << "No se pueden buscar 0 o menos veces." << endl;
        cout << endl;
        error=true;
    }

    if(arco<0){
        cout << "ERROR!" << endl;
        cout << "No se pueden generar rangos negativos." << endl;
        cout << endl;
        error=true;
    }

    if(numero>arco){
        cout << "ERROR!" << endl;
        cout << "No se pueden buscar numeros mayores que el rango." << endl;
        cout << endl;
        error=true;
    }
    return error;
}

void Errores2(int h)
{
    if(h==0){
        cout << "(Es probable que haya sucedido un error, compruebe los valores introducidos.)" << endl;
    }

}
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

avesudra

#1
Hola, así por encima:
         1. Pon comentarios porque a priori no sé que es x ni y ni i.
         2. Esto solo se permite en un estándar con extensiones. Para hacerlo en ISO C++ tienes tres opciones:
Código (cpp) [Seleccionar]
int posiciones[i]
                   a. Poner directamente un 0 porque i vale 0 en ese momento.
                  b. Hacerlo con memoria dinámica.
                  c. Usar la clase vector.
            Pero definitivamente en ISO C++ no puedes declarar un array con una variable en los corchetes.
         3. La función Errores devuelve un entero, y tu devuelves un booleano, es bueno que respetes los tipos. Si vas a devolver un bool el tipo de retorno debe ser bool. ¿Por qué el compilador no da fallo? Pues porque realiza conversiones implícitas, primero de bool a int y                 luego de int a bool para que no haya problemas.
Regístrate en

AlbertoBSD

#2
Usar la clase vector. Esa es la mejor opción si estas trabajando con C++.

Ya que las lineas no pueden ser declaradas asi ni en C ni en C++

   int i=0;
   int posiciones[i];


Podrias cambiarlo por

int posiciones[] = new int[i]

Aunque tambien i en ese momento vale 0 creo que no aplica ahi.

Saludos




PD:

En los libros de C que tengo nunca se mencionan los datos bool. Siempre usan un Dato entero para ellos.

Obvio es solo de C++ pero...

Ahorita busque sobre ellos y solo salen referencias vagas pero ninguna referencia oficial.

Segun esto solo encontre

El tipo bool es una incorporación reciente del lenguaje (1998)

Pero no menciona ninguna fuente. El uso de enteros como booleanos a mi me parece correcto siempre que solo loa manejes como 0 y 1

Voy a abrir un nuevo Tema al respecto para ver ahi los por menores y no desviar mas el Tema.

Cualquier comentario de los datos bool solo aqui:

Tipo de dato bool

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

cNoob

A que os referís con que use la clase vector?
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."

avesudra

#4
Cita de: cNoob en 18 Junio 2016, 17:50 PM
A que os referís con que use la clase vector?

vector es un tipo de objeto de la biblioteca estándar de plantillas que te permite trabajar fácilmente con un array dinámico.En conjunto con otras funciones proporcionadas por la STL(standard template library) te permite hacer una gran variedad de cosas.

Por otra parte, sinceramente primero debes aprender lo básico(evidentemente es lo del principio):

         - Estructuras de control, if - else, do - while, while, for, switch.
         - Funciones. (paso por referencia y valor).
         - Punteros (y entenderlos bien).
         - Objetos (clases y estructuras).
         - Herencia.
         - Polimorfismo y RTTI.
         - Programación Genérica.

Tienes que ir dando pasitos.

Un saludo.
Regístrate en

cNoob

Wow, muchas gracias por el esquemita de lo que he de ir aprendiendo, lo cierto es que esta un poco hecho un desastre por que el programa originalmente estaba todo en int main y cuando aprendí a hacer funciones lo dividí en cachos. Un saludo! :P
Wannabe programador autodidacta de c++
"Usain Bolt comenzó gateando."