Fişierul date.in conţine două linii. Pe prima linie a fişierului este scris un număr natural n (1£n£100), iar pe a doua linie sunt scrise n numere naturale, formate fiecare din cel mult 4 cifre, reprezentând un șir s de numere. Numerele din fișier sunt separate prin câte un spaţiu. Se consideră subprogramele: · S1 cu doi parametri, x și y, prin intermediul cărora primeşte două numere naturale nenule. Subprogramul returnează cea mai mare valoare dintre valorile primite prin intermediul parametrilor x și y; · S2 cu patru parametri, care primeşte prin intermediul parametrilor: - v,un tablou unidimensional format din cel mult 100 componente, cu indicii de la 1, ce memorează numere naturale cu cel mult 4 cifre fiecare; - n, numărul de elemente ale tabloului; - k, un număr natural k≤n; - x, un număr natural de cel mult patru cifre. Subprogramul inserează în tabloul v valoarea conținută de parametru x pe poziția k din tablou, şi apoi, returnează tabloul modificat prin intermediul aceluiaşi parametru și numărul modificat de elemente prin intermediul parametrului n. Cerinţe: a) Scrieţi definiţia completă a subprogramului S1; b) Scrieţi definiţia completă a subprogramului S2; c) Să se scrie un program Pascal/C/C++ care citeşte din fişierul date.in numărul n şi șirul s de numere, iar apoi, folosind apeluri utile ale subprogramelor S1 şi S2, modifică șirul inserând după fiecare număr s[p] din șir un număr reprezentând cea mai mare valoare dintre cele situate în șir pe pozițiile 1,2,...,p (1≤p≤n). Numerele din șirul modificat se vor afișa în fișierul date.out, în prima linie, separate prin câte un spațiu. Exemplu. Dacă fişierul date.in are conţinutul alăturat, programul va afişa în date.out numerele următoare: 10 10 2 10 14 14 9 14 date.in: 4 10 2 14 9
Răspunsuri la întrebare
Răspuns:
a)
int S1(int x, int y) {
return max(x, y);
}
b)
void S2(int v[], int &n, int k, int x) {
for (int i = n; i >= k; i--) {
v[i + 1] = v[i];
}
v[k] = x;
n++;
}
c)
#include <bits/stdc++.h>
using namespace std;
int S1(int x, int y) {
return max(x, y);
}
void S2(int v[], int &n, int k, int x) {
for (int i = n; i >= k; i--) {
v[i + 1] = v[i];
}
v[k] = x;
n++;
}
int main() {
int n;
cin >> n;
int v[105];
for (int i = 0; i < n; i++) {
cin >> v[i];
}
for (int i = 0; i < n; i++) {
int x = v[i];
for (int j = 0; j < i; j++) {
x = S1(x, v[j]);
}
S2(v, n, i + 1, x);
}
for (int i = 0; i < n; i++) {
cout << v[i] << " ";
}
return 0;
}
Explicație:
a) Subprogramul S1 are doi parametri, x și y, prin intermediul cărora primește două numere naturale nenule. Subprogramul returnează cel mai mare dintre cele două numere primite prin intermediul parametrilor x și y.
b) Subprogramul S2 are patru parametri: v, un tablou unidimensional format din cel mult 100 de componente, care memorează numere naturale cu cel mult 4 cifre fiecare; n, numărul de elemente ale tabloului; k, un număr natural k≤n; x, un număr natural de cel mult patru cifre. Subprogramul inserează valoarea conținută de parametrul x în tabloul v pe poziția k și returnează tabloul modificat prin intermediul aceluiași parametru și numărul modificat de elemente prin intermediul parametrului n.
c) Programul principal citește numărul n și șirul s de numere din fișierul date.in. Apoi, folosind apeluri ale subprogramelor S1 și S2, modifică șirul s prin inserarea după fiecare număr s[p] din șir a celui mai mare număr dintre numerele situate în șir pe pozițiile 1, 2, ..., p (1≤p≤n). Numerele din șirul modificat sunt afișate în fișierul date.out, separate prin spații.