Fişierul atestat.în conţine două linii. Pe prima linie este scris un număr natural nenul n,(5
Să se scrie un program, în limbajul Pascal/C/C++, care:
-afişează pe ecran, în linie, separate printr-un spaţiu, toate numerele impare din șir aflate pe poziții pare;
-prin intermediul unui subprogram, afişează pe ecran, separate prin câte un spațiu, elementele șirului după interschimbarea elementului minim cu cel maxim.
-scrie în fişierul atestat.out, pe o linie, separate prin câte un spațiu, cifra de control a fiecărui număr din șirul inițial: Cifra de control se obţine calculcând suma cifrelor numărului, apoi suma cifrelor sumei și tot așa până la obținerea unei singure cifre.
Exemplu:
atestat.in Date de ieşire:
7
248 326 27 165 7231 546 190 a)
b)
c) 165
248 326 7231 165 27 546 190
Fişierul atestat.out conţine:
5 2 9 3 4 6 1
Răspunsuri la întrebare
#include <fstream>
#include <iostream>
#include <algorithm>
using namespace std;
//Functie care afiseaza numerele pare de pe poz. impare
void afisare_pare_impare(int* v, int n) {
for (int i = 0; i < n; i++) {
if (i % 2 == 0 && v[i] % 2 == 0) cout << v[i] << " ";
}
cout << endl;
}
//Functie care afiseaza sirul dupa interschimabrea minumului cu maximul
void afisare_min_max(int* v, int n) {
int poz_minim = 0, poz_maxim = 0;
//Cautare min si max
for (int i = 1; i < n; i++) {
if (v[i] > v[poz_maxim]) poz_maxim = i;
if (v[i] < v[poz_minim]) poz_minim = i;
}
//Interschimbare
swap(v[poz_maxim], v[poz_minim]);
//Afisare sir
for (int i = 0; i < n; i++)
cout << v[i] << " ";
cout << endl;
}
//Functie care returneaza cifra de control
int cif_control(int n) {
if (n == 0) return 0;
if (n % 9 != 0) return n % 9;
return 9;
}
//Functie care afiseaza cifra de control pentru fiecare numar
void afisare_control(int* v, int n) {
for (int i = 0; i < n; i++)
cout << cif_control(v[i]) << " ";
}
int main() {
ifstream fin("atestat.in");
int n;
//Citire numar de valori fisier, alocare spatiu
fin >> n;
int *v = new int[n];
//Citire valori din fisier
for (int i = 0; i < n; i++) fin >> v[i];
//Subpunct A
afisare_pare_impare(v, n);
//Subpunct B
afisare_min_max(v, n);
//Subpunct C
afisare_control(v, n);
//Eliberare memorie
delete[] v;
return 0;
}
► NOTA
Am folosit algoritm eficient pentru calculul cifrei de control, bazat pe restul impartirii numarului la 9