Considerar:

#include <iostream> //Include header file

using namespace std;

int main () //start of main function
{

    int values[20]; //Declares array and how many elements
    int small, big; //Declares integer
    big = small = values[0]; //Assigns element to be highest or lowest value

    for (int i = 0; i < 20; i++) //Counts to 20 and prompts the user for a value and stores it
    {
        cout << "Enter value " << i << ": ";
        cin >> values[i];
    }

    for (int i = 0; i < 20; i++) //Works out the biggest number
    {
        if(values[i] > big) //Compare biggest value with current element
        {
            big = values[i];
        }
    }

    for (int i = 0; i < 20; i++) //Works out the smallest number
    {
        if (values[i] < small) //Compares smallest value with current element
        {
            small = values[i];
        }
    }

    cout << "The biggest number is " << big << endl; //Prints outs the biggest number
    cout << "The smallest number is " << small << endl; //Prints out the smallest number
}

Este es mi código hasta el momento. El problema que estoy teniendo es con la impresión de que el mayor número de la matriz. Algo que ver con la asignación de la primer elemento para el mayor y el menor valor. Funciona si lo hago por separado. Alguna sugerencia?

  • Usted sabe, yo estoy a todos por los comentarios. Pero un comentario como este //include header file es un estorbo. La persona que va a leer o grado de su trabajo sabe lo que es una directiva include hace.
  • big=small=values[0] Un comportamiento indefinido como los elementos que no han tenido un valor definido. Si se compila con las advertencias de encendido, el compilador generará el mensaje de error apropiado: -Wall -Wexra -Werror
  • así como muchos otros comentarios: //start of main fcn, //delcares array and how many elements, //declares integer
InformationsquelleAutor user2204993 | 2013-04-30

5 Comentarios

  1. 10

    A menos que usted realmente debe implementar su propia solución, puede utilizar std::minmax_element. Esto devuelve un par de iteradores, uno para el elemento más pequeño y uno de los más grandes.

    #include <algorithm>
    
    auto minmax = std::minmax_element(std::begin(values), std::end(values));
    
    std::cout << "min element " << *(minmax.first) << "\n";
    std::cout << "max element " << *(minmax.second) << "\n";
    • También tenga en cuenta que minmax_element minimiza el número de comparaciones necesarias, por lo que es aún más rápido que un ingenuo escrito a mano bucle si la comparación es caro.
  2. 5
    big=small=values[0]; //assigns element to be highest or lowest value

    Debe ser AFTER llenar bucle

    //counts to 20 and prompts user for value and stores it
    for ( int i = 0; i < 20; i++ )
    {
        cout << "Enter value " << i << ": ";
        cin >> values[i];
    }
    big=small=values[0]; //assigns element to be highest or lowest value

    ya que cuando se declara el array – es unintialized (tienda de algunos valores no definidos), y así, su big y small después de la asignación de almacenaría undefined valores demasiado.

    Y, por supuesto, usted puede utilizar std::min_element, std::max_element, o std::minmax_element de C++11, en lugar de escribir tus bucles.

    • Para añadir a esto. Mediante la asignación de grandes y pequeños antes de llenar la matriz estás asignando valores no definidos, que puede llegar a ser almacenados como arbitrariamente alta o baja de los números. Esto podría terminar dando resultados incorrectos en su salida.
    • gracias por la ayuda, podría explicar por qué
  3. 2
    int main () //start of main fcn
    {
    
        int values[ 20 ]; //delcares array and how many elements
        int small,big; //declares integer
         for ( int i = 0; i < 20; i++ ) //counts to 20 and prompts user for value and stores it
        {
            cout << "Enter value " << i << ": ";
            cin >> values[i];
        }
        big=small=values[0]; //assigns element to be highest or lowest value
        for (int i = 0; i < 20; i++) //works out bigggest number
        {
            if(values[i]>big) //compare biggest value with current element
            {
                big=values[i];
            }
             if(values[i]<small) //compares smallest value with current element
            {
                small=values[i];
            }
        }
         cout << "The biggest number is " << big << endl; //prints outs biggest no
        cout << "The smallest number is " << small << endl; //prints out smalles no
    }
  4. 1

    Asignar a grandes y pequeños antes de que la matriz es inicializado, es decir, grandes y pequeños asumir el valor de lo que está en la pila en este punto. Ya que simplemente son tipos de valor y no hay referencias, no van a suponer un nuevo valor una vez que los valores[0] está escrito a través de cin >>.

    Sólo mover la asignación después de su primer bucle y que debería estar bien.

  5. 0

    Puede inicializar después del llenado de la matriz o puede escribir:

     small =~ unsigned(0)/2; //Using the bit-wise complement to flip 0's bits and dividing by 2 because unsigned can hold twice the +ve value an

    entero puede contener.

     big =- 1*(small) - 1;

    lugar de:

    big = small = values[0]

    porque al escribir esta línea antes de llenar la matriz, grandes y pequeños valores será igual al azar a una sobras de valor (como número entero es un POD) de la memoria y si esos números son más grandes o más pequeños que cualquier otro valor en el que la matriz, obtendrá como salida.

    • Puedo ver a alguien que está en la ofuscación.
    • No crees que sería más inteligente para el uso de std::numeric_limits?
    • Bueno,lo siento pero yo quería a punto de este método y traté de hacer lo más claro posible.
    • Bueno, es la forma más elegante de hacerlo, pero para un usuario con un poco de experiencia que podría tratar de usar 32 bits climits encabezado por una de 64 bits escenario y vi a este caso y como se definen como sigue en el encabezado: #define INT_MAX 2147483647(depende OS) por lo que se consigue un incorrecto max, pero el método anterior, asegúrese de que

Dejar respuesta

Please enter your comment!
Please enter your name here