Informatică, întrebare adresată de iordachefloringabrie, 8 ani în urmă

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

Răspuns de andrei750238
2

#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

Alte întrebări interesante