Clasa a X-a · Subprograme (funcții)Read in English

Funcție cu vector ca parametru (maximul) în C++

În engleză: Function with an array parameter (the maximum)

O(n)C++1752 de linii2 exemple

Ideea

Un vector se transmite unei funcții împreună cu numărul de elemente: int maxim(int v[], int n). Funcția primește de fapt adresa primului element, deci lucrează direct pe vectorul din main (nu pe o copie). Avem și o funcție void citeste(int v[], int &n) care umple vectorul; n este transmis prin referință ca să ajungă valoarea citită în main.

Descrierea în engleză

An array is passed to a function together with the number of elements: int maxim(int v[], int n). The function actually receives the address of the first element, so it works directly on the array in main (not on a copy). There is also a function void citeste(int v[], int &n) that fills the array; n is passed by reference so the value read reaches main.

Complexitate
O(n)
Clasa
Clasa a X-a (Grade 10)

Exemple

Exemplul 1

Intrare

5
3 8 -2 8 1

Ieșire așteptată

8
Exemplul 2

Intrare

3
-5 -1 -9

Ieșire așteptată

-1

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

functie-maxim-vector.cpp
/*
 * Titlu: Funcție cu vector ca parametru (maximul)
 * Clasa: 10
 * Capitol: Subprograme (funcții)
 * Descriere: Un vector se transmite unei funcții împreună cu numărul de elemente:
 *            int maxim(int v[], int n). Funcția primește de fapt adresa primului
 *            element, deci lucrează direct pe vectorul din main (nu pe o copie).
 *            Avem și o funcție void citeste(int v[], int &n) care umple vectorul;
 *            n este transmis prin referință ca să ajungă valoarea citită în main.
 * Complexitate: O(n)
 *
 * Exemplu
 * Intrare:
 * 5
 * 3 8 -2 8 1
 * Ieșire: 8
 *
 * Exemplu
 * Intrare:
 * 3
 * -5 -1 -9
 * Ieșire: -1
 */
#include <iostream>
using namespace std;

void citeste(int v[], int &n)
{
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> v[i];
}

int maxim(int v[], int n)
{
    int mx = v[0];
    for (int i = 1; i < n; i++)
    {
        if (v[i] > mx)
            mx = v[i];
    }
    return mx;
}

int main()
{
    int v[1000], n;
    citeste(v, n);
    cout << maxim(v, n) << '\n';
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.