Los nuevos programadores generalmente buscan formas de devolver múltiples valores de una función. Desafortunadamente, C y C++ no permiten esto directamente. Pero afortunadamente, con un poco de programación inteligente, podemos lograrlo fácilmente. A continuación se muestran los métodos para devolver múltiples valores de una función en C:
- Mediante el uso de punteros.
- Mediante el uso de estructuras.
- Mediante el uso de arrays.
Ejemplo: Considere un ejemplo donde la tarea es encontrar el mayor y el menor de dos números distintos. Podríamos escribir múltiples funciones. El problema principal es la molestia de llamar a más de una función, ya que necesitamos devolver múltiples valores y, por supuesto, tener más líneas de código para escribir.
- Devolver múltiples valores Usando punteros: Pase el argumento con su dirección y realice cambios en su valor usando el puntero. Para que los valores se cambien al argumento original.
C++
// Modified program using pointers #include <iostream> using namespace std; // add is the short name for address void compare(int a, int b, int* add_great, int* add_small) { if (a > b) { // a is stored in the address pointed // by the pointer variable *add_great *add_great = a; *add_small = b; } else { *add_great = b; *add_small = a; } } // Driver code int main() { int great, small, x, y; cout << "Enter two numbers: \n"; cin >> x >> y; // The last two arguments are passed // by giving addresses of memory locations compare(x, y, &great, &small); cout << "\nThe greater number is " << great << " and the smaller number is " << small; return 0; } // This code is contributed by sarajadhav12052009
C
// Modified program using pointers #include <stdio.h> // add is the short name for address void compare(int a, int b, int* add_great, int* add_small) { if (a > b) { // a is stored in the address pointed // by the pointer variable *add_great *add_great = a; *add_small = b; } else { *add_great = b; *add_small = a; } } // Driver code int main() { int great, small, x, y; printf("Enter two numbers: \n"); scanf("%d%d", &x, &y); // The last two arguments are passed // by giving addresses of memory locations compare(x, y, &great, &small); printf("\nThe greater number is %d and the smaller number is %d", great, small); return 0; }
Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
- Devolver múltiples valores usando estructuras: como la estructura es un tipo de datos definido por el usuario. La idea es definir una estructura con dos variables enteras y almacenar los valores mayores y menores en esas variables, luego usar los valores de esa estructura.
C
// Modified program using structures #include <stdio.h> struct greaterSmaller { int greater, smaller; }; typedef struct greaterSmaller Struct; Struct findGreaterSmaller(int a, int b) { Struct s; if (a > b) { s.greater = a; s.smaller = b; } else { s.greater = b; s.smaller = a; } return s; } // Driver code int main() { int x, y; Struct result; printf("Enter two numbers: \n"); scanf("%d%d", &x, &y); // The last two arguments are passed // by giving addresses of memory locations result = findGreaterSmaller(x, y); printf("\nThe greater number is %d and the" "smaller number is %d", result.greater, result.smaller); return 0; }
Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
- Devolver valores múltiples usando una array (funciona solo cuando los elementos devueltos son del mismo tipo): cuando una array se pasa como argumento, su dirección base se pasa a la función, por lo que, independientemente de los cambios realizados en la copia de la array, se cambia en la array original. A continuación se muestra el programa para devolver valores múltiples usando una array, es decir, almacenar un valor mayor en arr[0] y menor en arr[1].
C++
// Modified program using array #include <iostream> using namespace std; // Store the greater element at 0th index void findGreaterSmaller(int a, int b, int arr[]) { // Store the greater element at // 0th index of the array if (a > b) { arr[0] = a; arr[1] = b; } else { arr[0] = b; arr[1] = a; } } // Driver code int main() { int x, y; int arr[2]; cout << "Enter two numbers: \n"; cin >> x >> y; findGreaterSmaller(x, y, arr); cout << "\nThe greater number is " << arr[0] << " and the " "smaller number is " << arr[1]; return 0; } // This code is contributed by sarajadhav12052009
C
// Modified program using array #include <stdio.h> // Store the greater element at 0th index void findGreaterSmaller(int a, int b, int arr[]) { // Store the greater element at // 0th index of the array if (a > b) { arr[0] = a; arr[1] = b; } else { arr[0] = b; arr[1] = a; } } // Driver code int main() { int x, y; int arr[2]; printf("Enter two numbers: \n"); scanf("%d%d", &x, &y); findGreaterSmaller(x, y, arr); printf("\nThe greater number is %d and the " "smaller number is %d", arr[0], arr[1]); return 0; }
Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
Métodos solo de C++
- Devolver valores múltiples usando referencias: Usamos referencias en C++ para almacenar valores devueltos.
CPP
// Modified program using References in C++ #include <stdio.h> void compare(int a, int b, int &add_great, int &add_small) { if (a > b) { add_great = a; add_small = b; } else { add_great = b; add_small = a; } } // Driver code int main() { int great, small, x, y; printf("Enter two numbers: \n"); scanf("%d%d", &x, &y); // The last two arguments are passed // by giving addresses of memory locations compare(x, y, great, small); printf("\nThe greater number is %d and the" "smaller number is %d", great, small); return 0; }
Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
- Devolver múltiples valores usando Clase y Objeto: La idea es similar a las estructuras. Creamos una clase con dos variables enteras y almacenamos los valores mayores y menores en esas variables, luego usamos los valores de esa estructura.
CPP
// Modified program using class #include <stdio.h> class GreaterSmaller { public: int greater, smaller; }; GreaterSmaller findGreaterSmaller(int a, int b) { GreaterSmaller s; if (a > b) { s.greater = a; s.smaller = b; } else { s.greater = b; s.smaller = a; } return s; } // Driver code int main() { int x, y; GreaterSmaller result; printf("Enter two numbers: \n"); scanf("%d%d", &x, &y); // The last two arguments are passed // by giving addresses of memory locations result = findGreaterSmaller(x, y); printf("\nThe greater number is %d and the" "smaller number is %d", result.greater, result.smaller); return 0; }
Enter two numbers: 5 8 The greater number is 8 and the smaller number is 5
- Devolver múltiples valores usando tupla STL: La idea es similar a las estructuras. Creamos una tupla con dos variables enteras y devolvemos la tupla, y luego dentro de la función principal usamos la función de enlace para asignar valores a min y max que devuelve la función.
CPP
// Modified program using C++ STL tuple #include<iostream> #include<tuple> using namespace std; tuple <int, int> findGreaterSmaller(int a, int b) { if (a < b) { return make_tuple(a, b); } else { return make_tuple(b, a); } } // Driver code int main() { int x = 5, y= 8; int max, min; tie(min, max) = findGreaterSmaller(x, y); printf("The greater number is %d and the " "smaller number is %d", max, min); return 0; } // This article is contributed by Blinkii
The greater number is 8 and the smaller number is 5
Publicación traducida automáticamente
Artículo escrito por Amrutesh99 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA