Informatică, întrebare adresată de luchiananamarioya3l5, 9 ani în urmă

Scrieți definiția completă a subprogramului C++ ordon123 care are 2 parametri: n – prin care primește un număr natural a – prin care primește un tablou unidimensional cu n elemente, numere naturale din mulțimea {1,2,3}. Subprogramul ordonează crescător tabloul a fără a returna valori.

Răspunsuri la întrebare

Răspuns de blindseeker90
3
Daca elementele tabloului pot sa fie doar 1,2,3 atunci orice ordonare a lor va avea valorile de 1 mai intai, apoi valorile de 2 si apoi cele de 3.
Asa ca le-am putea ordona numarand de cate ori se repeta fiecare valoare si apoi punandu-le in ordinea aceasta in vector.
De exemplu: pentru n=8 si a=[2,1,3,1,2,3,2,1] vedem ca sunt 3 de 1, 3 de 2 si 2 de 3, atunci punem in ordonare a=[1,1,1,2,2,2,3,3] de fiecare data.
Pentru a vedea repetitia fiecarui numar, initializam un vector cu 0(repet_elem) si in momentul in care gasim una dintre valori in sir, incrementam valoarea lui repet_elem cu inca o unitate

#include <iostream>
using namespace std;
//vector initializat cu 0
int repet_elem[4];

//subprogram: functie fara returnare
void ordon123(int n,int a[]){
int i,nr_elem=0;
//repet_elem se incrementeaza pentru elementul a[i]
for(i=0;i<n;i++){
repet_elem[a[i]]++;
}
//
for(i=1;i<=3;i++){
//cat timp repet_elem mai mare decat 0, adica mai exista cifra
//atunci elementul este egal cu cifra respectiva
while(repet_elem[i]>0){
//elementul vectorului este egal cu cifra 1,2, sau 3
a[nr_elem]=i;
//scadem numarul de repetitii
repet_elem[i]--;
//trecem la urmatorul elemenet din sir
nr_elem++;
}
}

}
//parte de testare a functiei
int main(){
int i,n,a[20];
cout<<"Introduceti nr de elemente:";
cin>>n;
cout<<"Introduceti elemente:";
for(i=0;i<n;i++){
cin>>a[i];
}
ordon123(n,a);
for(i=0;i<n;i++){
cout<<a[i]<<" ";
}
return 0;
}
Alte întrebări interesante