midpoint() en C++20 con ejemplos

La función midpoint() calcula el punto medio de los números enteros, puntos flotantes o punteros a y b.
Archivo de cabecera: 

<numeric>

 Parámetros: Esta función acepta dos tipos de datos como enteros, puntos flotantes, valores de puntero.

Devolver:

Devuelve los puntos medios de los tipos de datos dados.
Algoritmo que implementa esta función :

  • La mitad de la suma de ayb sin desbordamiento . Igual que, (a + b)/2.
  • Si a y b son tipos enteros y la suma es impar, el resultado se redondea hacia a.
  • Si a y b son tipos de coma flotante, se produce como máximo una operación inexacta (redondeada a cero).
  • Si a y b apuntan a x[i] y x[j] respectivamente del mismo objeto de array x (a efectos de la aritmética de punteros ), el resultado será un puntero a x[i + (j – i)/2 ] (o, equivalentemente x[std::midpoint(i, j)]) donde la división se redondea hacia cero. Si a y b no apuntan a elementos del mismo objeto de array, el comportamiento no está definido.

Usos de la función midpoint() :

  • Punto medio de dos números enteros usando midpoint(): A continuación se muestra el programa C++ para demostrar el punto medio de dos números enteros usando midpoint() :

C++

// C++ program to demonstrate the
// midpoint function
#include <iostream>
#include <numeric>
using namespace std;
 
// Driver Code
int main()
{
    // a and b both of integer type
    int a = 3;
    int b = 6;
 
    cout << "midpoint(" << a << ", "
         << b << "): "
         << midpoint(a, b) << endl;
 
    a = 6;
    b = 3;
    cout << "midpoint(" << a
         << ", " << b << "): "
         << midpoint(a, b) << endl;
 
    return 0;
}

Producción:

  • midpoint() puede manejar casos como un desbordamiento: A continuación se muestra el programa C++ para demostrar cómo manejar el desbordamiento usando midpoint() :
     

C++

// C++ program for the above approach
#include <climits>
#include <iostream>
#include <numeric>
using namespace std;
 
// Driver Code
int main()
{
    // a stores maximum storable
    // value of integer
    int a = INT_MAX;
 
    // b stores maximum storable
    // value of integer - 2
    int b = INT_MAX - 2;
 
    cout << "a: " << a << endl
         << "b: " << b << endl
         << "Incorrect (overflow"
         << " and wrapping): "
         << (a + b) / 2 << endl
         << "Correct: "
         << midpoint(a, b) << "\n\n";
 
    return 0;
}

Producción:

  • Punto medio de dos números flotantes usando midpoint(): A continuación se muestra el programa C++ para demostrar cómo encontrar el punto medio de dos números de punto flotante usando midpoint() :

C++

// C++ program for the above approach
#include <iostream>
#include <numeric>
 
using namespace std;
 
int main()
{
    // x and y both floating type
    float x = 6.56;
    float y = 7.23;
 
    cout << "midpoint(" << x
         << ", " << y << "): "
         << midpoint(x, y) << endl;
 
    x = 2.0;
    y = 3.0;
 
    cout << "midpoint(" << x
         << ", " << y << "): "
         << midpoint(x, y)
         << endl
         << endl;
}

Producción:

  • Punto medio entre dos punteros que apuntan al mismo objeto usando midpoint(): A continuación se muestra el programa C++ para demostrar cómo encontrar el punto medio de dos punteros que apuntan al mismo objeto usando midpoint() :
     

C++

// C++ program for the above approach
#include <iostream>
#include <numeric>
using namespace std;
 
// Driver Code
int main()
{
    // str is a character array
    char str[] = "GeeksforGeeks";
 
    // str1 is pointing to the
    // 5-th element in str
    char* str1 = &str[4];
 
    // str2 is pointing to the
    // 10-th element in str
    char* str2 = &str[9];
 
    // str1 and str2 is pointing same
    // object str therefore, we can
    // logically compute and point a
    // middle element in str
    cout << "midpoint('" << *str1
         << "', '" << *str2 << "'): '"
         << *midpoint(str1, str2)
         << "'" << endl;
 
    cout << "midpoint('" << *str2
         << "', '" << *str1 << "'): '"
         << *midpoint(str2, str1)
         << "'" << endl;
}

Producción:

Publicación traducida automáticamente

Artículo escrito por scorchingeagle y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *