Académique Documents
Professionnel Documents
Culture Documents
Clasa a V - a
OSHO
Etapele de rezolvare a unei probleme
1
2
3
Fișă de lucru – Tipuri de date, operatori, expresii
1. Care dintre următoarele valori fac parte din tipul întreg: 4. Care este valoarea expresiei: 20 div 10 * 2 + 30 div 15 * 2
a) 2
Valoarea DA sau NU b) 0
c) 8
23.0 d) 4
-4321
-24.0
+1234 5. Care este valoarea expresiei: 4000 div 10 div 10 * 2 + 4 *10 *10 div 2
12345 a) 400.0
0.0 b) 280.0
c) 240.0
2. Care dintre următoarele operații au ca rezultat valori din tipul întreg sau d) 220.0
real?(Operatorul [ ] desemnează partea întreagă, iar operatorul mod
desemnează restul la împărțirea întreagă):
6. Se dau următoarele secvențe de atribuire:
Valoarea DA sau NU
(S1) 𝑎𝑎 ← 1; 𝑏𝑏 ← 2; 𝑐𝑐 ← 3; 𝑑𝑑 ← 4
3 <> 4
[10.235] (S2) 𝑎𝑎 ← 𝑏𝑏; 𝑏𝑏 ← 𝑐𝑐; 𝑐𝑐 ← 𝑑𝑑; 𝑑𝑑 ← 𝑎𝑎
not (5>6)
(S3) 𝑏𝑏 ← 𝑐𝑐; 𝑐𝑐 ← 𝑑𝑑; 𝑑𝑑 ← 𝑎𝑎; 𝑎𝑎 ← 𝑏𝑏
2 mod 10
10.01 <14.6 (S4) 𝑐𝑐 ← 𝑑𝑑; 𝑑𝑑 ← 𝑎𝑎; 𝑎𝑎 ← 𝑏𝑏; 𝑏𝑏 ← 𝑐𝑐
√𝟏𝟏𝟏𝟏. 𝟎𝟎 + 𝟔𝟔
Să se precizeze valorile variabilelor de memorie a, b, c și d obținute în urma
executării operațiilor de atribuire, în ordine:
3. Care dintre următoarele operații au ca rezultat valoarea true știind că
variabilele întregi a și b au valorile a=23 și b=50. a) S1; S2; S3
Valoarea Adevărat sau fals b) S1; S3; S2
c) S1; S2; S2; S3
a<>b d) S1; S2; S3; S4
a>b
b<=a
b>=a
4
10. Variabila x are valoarea 3.Care dintre următoarele operații de atribuire
7. Dacă într-un algoritm există variabilele a de tip caracter, b, i, j, k, l, m de tip
permite ca variabila x să își modifice valoarea din 3 în 0?
întreg și c de tip logic și se atribuie acestor date următoarele valori inițiale:
a)𝒙𝒙 ← 𝒙𝒙 − 𝟏𝟏𝟏𝟏 𝒅𝒅𝒅𝒅𝒅𝒅 𝟒𝟒
𝑎𝑎 ←′ 4′ 𝑏𝑏 ← 8 𝑐𝑐 ← 𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓𝑓 𝑖𝑖 ← 4 𝑗𝑗 ← 6 𝑘𝑘 ← 8 𝑙𝑙 ← 1 𝑚𝑚 ← 10 b) 𝒙𝒙 ← (𝒙𝒙 − 𝟏𝟏) + 𝟑𝟑
c) 𝒙𝒙 ← 𝟐𝟐 ∗ 𝒙𝒙 − 𝟔𝟔
evaluați următoarele expresii:
d) 𝒙𝒙 ← 𝟐𝟐 + 𝟓𝟓 𝒎𝒎𝒎𝒎𝒎𝒎 𝟐𝟐
Expresia Rezultat Expresia Rezultat
(b>15) or c i–j+k–l+m 11. Care sunt valorile variabilelor reale x și y după executarea instrucțiunilor
a>=’0’ and a<=’9’ 3 * j mod m - i următoare:
not c or (a=’a’) (i+j) div (m-j)
𝒙𝒙 ← 𝟐𝟐𝟐𝟐. 𝟓𝟓𝟓𝟓
(k>b) and c (j + (m – l * (j + i)) – k) + 5
i+j*l-m j*j–I-k 𝒚𝒚 ← [𝒙𝒙] + 𝟖𝟖
𝒙𝒙 ← 𝟐𝟐 ∗ 𝒙𝒙
8. Completați tabelul de mai jos:
𝒚𝒚 ← 𝒚𝒚 + 𝒙𝒙
a b not a not b not a and not b (a and b) or a 12. Care dintre următoarele expresii determină inserarea cifrei 7 în faţa ultimei
T T cifre a unui număr natural, cu mai mult de 2 cifre, memorat în variabila x?
T F a. x←(x div 10 *10 + 7) * 10 + x mod 10
F T b. x←x div 10 + 7 + x mod 10
F F c. x←(x mod 10 * 10 + 7 )* 10 + x div 10
d. x←(x div 10 + 7) * 10 + x mod 10
9. Pentru a testa ultima cifră a unui număr întreg n, aceasta se extrage cu
expresia 𝒄𝒄𝒄𝒄𝒄𝒄𝒄𝒄𝒄𝒄 ← 𝒏𝒏 𝒎𝒎𝒎𝒎𝒎𝒎 𝟏𝟏𝟏𝟏 (restul împărțirii numărului la 10). De 13. Care dintre următoarele expresii determină eliminarea cifrei din mijloc a unui
exemplu, pentru a testa dacă ultima cifră a unui număr n este 2 se folosește număr natural, cu exact 5 cifre, memorat în variabila x?
condiția 𝒄𝒄 ← 𝒏𝒏 𝒎𝒎𝒎𝒎𝒎𝒎 𝟏𝟏𝟏𝟏 = 𝟐𝟐. Scrieți condiția prin care testați dacă ultima a. x ← x div 1000 * 100 + x mod 100
cifră a unui număr n este: b. x ← x mod 1000 * 100 + x div 100
c. x ← x div 100 * 100 + x mod 100
Condiția
d. x ← x div 1000 + x mod 100
3 sau 5
diferită de 3 și de 5 14. Se consideră variabila a care memorează un număr cu exact 6 cifre. Scrieți o
pară expresie care memorează în variabila b numărul format din cele două cifre
Impară din mijloc ale valorii memorate în a?
multiplu de 3
multiplu de 3 sau de 5
5
Algoritmi: caracteristici, reprezentare, implementare
După etapa de analiză a problemei în care s-au stabilit datele de intrare şi cele de ieşire,
urmează etapa de elaborare a algoritmului. Acesta trebuie reprezentat într-un mod inteligibil.
Este deci necesară utilizarea unui limbaj comun de repezentare a algoritmilor, dând apoi
posibilitatea fiecarui programator să “traducă” algoritmul în ce limbaj de programare doreşte.
Schemele logice reprezintă un algoritm în mod grafic, folosind blocuri diferite pentru operaţii
diferite. Această metodă are unele dezavantaje: schemele sunt stufoase, greu de urmărit. În
tabelul urmator prezentăm tipurile de blocuri folosite în reprezentarea algoritmilor. Schemele
logice sunt mai utile celor care abia învaţă să programeze şi deci sunt în faza de formare a
gândirii algoritmice.
Recomandare - la scrierea schemelor logice scrieți mai întâi conţinutul blocului şi apoi desenați
blocul corespunzător.
6
Bloc de atribuire Variabilei x i se atribuie
valoarea expresiei
x ← expresie
Limbajul Pseudocod
Limbajul pseudocod este un ansamblu de convenţii (codificări) care definesc operaţiile (instrucţiunile)
permise pentru reprezentarea algoritmilor. Respectand aceste convenţii, chiar în forme diferite, algoritmii
reprezentaţi în pseudocod pot fi citiţi de orice persoană, indiferent că este sau nu programator.
Limbajul pseudocod nu respectă o sintaxa anume, nu are un standard. Sunt doar nişte convenţii pe care
trebuie să le respectăm atunci când reprezentăm un algoritm. Instructiunile se pot scrie în limba engleză
sau în limba română.
În pseudocod putem scrie declarări de variabile, specificând numele şi tipul lor. Pe lângă declaraţiile de
variabile, limbajul pseudocod conţine cuvinte cheie, instrucţiuni (început, sfârşit, intrare/ieşire, atribuire,
decizie, selecţie, repetitive), proceduri/funcţii.
a, b, c intregi
x,z reale
Declaratii de variabile -
7
x ← 10
Instrucţiune de atribuire
a ← a+1 x ← expresie
Instrucţiune de decizie în
┌dacă c atunci
care se evaluează condiţia
| execută a
obţinându-se o valoare NU DA
|altfel
logică “Adevarat” sau “Fals” Condiție
| execută b
|▄
Problemă rezolvată
real L, l, P,A;
început START
citește L, l;
P← 2*L + 2*l;
A← L * l;
scrie P, A;
sfârșit CITEȘTE L, l
P← 2*L + 2*l
𝐴𝐴 ← L* l
SCRIE P, A
STOP
8
Fișă de lucru
Scheme logice, pseudocod
1. Se consideră schema logică de mai jos: 1. Ce valori vor fi afișate dacă a=3?
2. Scrieți algoritmul în limbajul pseudocod.
START 3. Identificați simbolurile grafice din
organigrama alăturată și completați tabelul de
mai jos:
Citește a
Simbol Ce reprezintă?
b← 𝑎𝑎 ∗ 𝑎𝑎 ∗ 𝑎𝑎
c← (𝑎𝑎 ∗ 𝑏𝑏) + 𝑏𝑏
scrie a,b,c,d
STOP
Scrie y, z
STOP
9
3. Se consideră următorul algoritm reprezentat sub forma unei organigrame.
START
Citește a
NU DA
a mod 100<50
Scrie a
STOP
10
5. Se consideră următorul algoritm descris în pseudocod.
întreg a, b, c;
început
citește a, b, c;
dacă a*b < 0 atunci
scrie “Există număr negativ”;
altfel
dacă b*c < 0 atunci
scrie “Există număr negativ”;
altfel
scrie “Numere pozitive”;
sfârșit.
a)Ce mesaj va fi afișat pentru a=2, b=6, c=-10? Dar pentru a=1, b=3 și c=10?
c)Rescrieți algoritmul, folosind o singură instrucțiune de decizie, astfel încât să verifice în mod
corect dacă cele trei valori ale datelor de intrare sunt pozitive.
întreg a, b, c,d
început
citește a, b;
𝒄𝒄 ← 𝒂𝒂 + 𝒃𝒃
𝒅𝒅 ← 𝒂𝒂 ∗ 𝒃𝒃
dacă c>d atunci
interschimbă c cu d
dacă a mod 2 = 0 atunci
scrie c,d;
altfel
scrie d,c;
sfârșit.
a) Ce valori vor fi afișate dacă a=34 și b=2? Dar dacă a=24 și b=-2?
b) Dați un exemplu pentru datele de intrare astfel încât algoritmul să afișeze la final două
valori egale.
c) Dați exemplu de valori pentru a și b astfel încât să fie afișată o pereche de valori pare
ordonate crescător.
11
7. Scrieți câte un algoritm pentru rezolvarea următoarelor expresii:
5 * x, dacă x < 0
3 * x − 1, dacă x<0
E= E = 2 − x, dacă 0 =< x <= 10
2 − x, dacă x >= 0
3 + x, x > 10
8. Se citeşte de la tastatură un număr natural n, să se afişeze dacă este par sau impar.
9. Se citeşte de la tastatură un număr n, să se afişeze dacă este pozitiv sau negativ.
10. Se citeşte de la tastatură un număr n, să se afişeze dacă este pozitiv, negativ sau nul.
11. Se citesc de la tastatură trei numere, să se afişeze cel mai mare.
12. Se citesc de la tastatură trei numere, să se ordoneze crescător.
13. Să se scrie condiţia ca un număr să aparţină intervalului (4,13].
14. Să se scrie condiţia ca un număr să NU aparţină intervalului (4,13].
15. Să se scrie condiţia ca un număr să aparţină intervalului [a,b).
16. Scrieți un algoritm care verifică dacă un număr este impar și afișează în caz afirmativ suma dintre
cifra zecilor și cifra unităților. În situația când numărul citit este par se va afișa mesajul “Număr
par”.
17. Se citește de la tastatură o valoare naturală x(x>10). Dacă valoarea citită are cifra unităților egală
cu cifra zecilor se vor afișa primele două numere naturale mai mari decât valoarea x. În caz contrar
se va afișa cifra maximă dintre cifra zecilor și a unităților.
Exemplu: Pentru x=3455 se va afișa 3456 3457
Pentru x=3485 se va afișa 8.
18. Se citește o valoare x număr natural. Să se scrie un algoritm care va afișa cele mai apropiate două
numere pare de numărul x. Exemplu: Pentru x=14 se va afișa 12 și 16
Pentru x=15 se va afișa 14 și 16.
19. Fie x număr natural. Să se determine ultima cifră a lui 2x (doi la puterea x).
20. Se citește de la tastatură un număr natural n cu exact 4 cifre. Să se verifice dacă numărul este:
Echilibrat - spunem că un număr este echilibrat dacă numărul de cifre pare este egal cu
numărul de cifre impare.
Pitic - spunem că un număr este pitic dacă toate cifrele sunt mai mici decât 4.
Generos - spunem că un număr este generos dacă suma cifrelor lui e mai mare decat n+2.
Pătrat perfect – numim pătrat perfect orice număr natural care se poate scrie ca puterea
a doua a altui număr natural.
Corect - spunem că un număr este corect dacă suma şi produsul cifrelor sunt pătrate
perfecte.
12
Probleme propuse
1. Într-un autobuz care pleacă în excursie sunt 7 copii. De la încă două şcoli urcă alţi copii,
numărul acestora citindu-se de la tastatură. Câţi copii au plecat în excursie? Identificaţi
datele de intrare şi de ieşire.
2. Un brăduţ este împodobit cu globuleţe albe, roşii şi albastre. Numărul globuleţelor albe
se citeşte de la tastatură. Câte globuleţe are brăduţul , ştiind că numărul de globuleţe
roşii este cu 3 mai mare decât numărul de globuleţe albe, iar numărul de globuleţe
albastre este cu 2 mai puţin decât totalul celor albe şi roşii? Identificaţi datele de intrare
şi de ieşire.
4. Se citește de la tastatură un număr natural x format din exact trei cifre. Să se calculeze
suma cifrelor numărului citit. De exemplu, x=234, pe ecran se va afișa 9(2+3+4).
5. Scrieţi un program care citeşte de la tastatură un număr natural cu patru cifre şi care
afişează numărul obţinut prin eliminarea cifrei sutelor. Modificaţi programul, astfel încât,
să afişeze numărul obţinut prin eliminarea cifrei zecilor.
6. Se citeşte un număr natural care reprezintă timpul exprimat în minute. Scrieţi programul
care afişează timpul exprimat în ore şi secunde.
13
NOŢIUNI TEORETICE ŞI PROBLEME
OPERATORI, STRUCTURI ALTERNATIVE
Un program scris în limbajul C++ este compus din unul sau mai multe fişiere sursă . Un fişier
sursă este un fişier text care conţine codul sursă al unui program. Fiecare fişier sursă conţine
una sau mai multe funcţii şi eventual, referinţe către unul sau mai fişiere header. Funcţia
principală a unui program este numită main.
Exemplu
//fisierul header iostream pentru operatiile de scriere si citire
#include <iostream>
/*fisierul header cmath folosit pentru a apela
functii matematice */
#include <cmath>
using namespace std;
//functia principala main care poate apela alte functii
int main()
{
//partea declarativa-variabila a de tip intreg
int a;
//si variabila b de tip real
float b;
//scrierea lui a - apare pe ecran a=
cout<<"a=";
//citirea lui a de la tastatura
cin>>a;
//instructiune
b=sqrt(a);
//afisarea pe ecran a valorii variabilei b
cout<<"Valoarea lui b este "<<b<<".";
}
c)Comentarii
Un comentariu, în limbajul C++, începe cu semnul //comentariu - pentru a scrie un comentariu
pe o singură linie – sau cu semnul /* comentariu */ - pentru a scrie un comentariu pe mai multe
linii. Comentariile nu au niciun efect asupra comportamentului programului. Programatorul poate
să le folosească pentru a include explicaţii scurte sau observaţii asupra codului sursă.
Aplicație
Click aici Exemplu și identifică în program operațiile de scriere și citire. Folosind un mediu de
dezvoltare al programelor scrise cu ajutorul limbajului C++(Code Blocks, MinGW, Borland C++,
Dev C++) urmărește execuția programului de mai jos.
#include <iostream>
using namespace std;
int main()
{
int x,y,z;
cout<<"Introduceti valoarea lui x:";cin>>x;
cout<<"Introduceti valoarea lui y:";cin>>y;
z=x+y;
cout<<"Suma celor doua numere este "<<z<<endl;
z=x*y;
cout<<"Produsul celor doua numere este "<<z<<endl;
z=x/y;
cout<<"Catul impartirii celor doua numere este "<<z<<endl;
z=x%y;
cout<<"Restul impartirii celor doua numere este "<<z;
}
TIP CARACTERISTICI
CHAR reţine un singur caracter Exemple: ‘A’,’a’,’%’, etc.
INT reţine numere întregi cu semn Exemple: 23,-45,0, etc.
FLOAT reţine numere reale în format cu virgulă mobilă, în simplă precizie
Exemple: 7.8965, -4.123, 7.0, etc.
DOUBLE reţine numere reale în format cu virgulă mobilă, în dublă precizie
Exemple: 7.8965, -4.123, 7.0, etc. (se utilizează când se prelucrează
numere foarte mari sau foarte mici)
VOID tip de date special care nu specifică un anumit set de valori iniţial, dar
care poate fi specificat ulterior declarării.
Modificatorii de tip. Limbajul C++ oferă pe lîngă cele 5 tipuri de bază prezentate mai sus, un
set de modificatori de tip:unsigned(fără semn), long(lung), signed(cu semn), register(registru),
short(scurt). Un modificator de tip schimbă domeniul valorilor pe care o variabilă le poate
păstra, sau modul în care compilatorul păstrează o variabilă. Pentru a se modifica un tip de data,
se va plasa modificatorul în faţa tipului respectiv.
b)Constante
Sunt date a căror valoare nu poate fi modificată în timpul execuţiei programului. Ele reprezintă
un tip şi o valoare şi astfel pot fi de mai multe tipuri:
constantă întreagă - se reprezintă sub forma unei înşiruiri de cifre: 6,456,1234.
constantă flotantă - 6.023e-23 = 6.023*10-23
constantă caracter este de fapt un caracter între apostrofuri. Se reprezintă pe 8 biţi, fiind
chiar reprezentarea în codul ASCII a caracterului respectiv.
Exemplu: ‘A’ reprezentare internă - 65 (codul ASCII a caracterului ‘A’), ‘a’ reprezentare
internă - 97 (codul ASCII a caracterului ‘a’)
constanta şir sau şir de caractere - acest tip de constantă apare ca o succesiune de
caractere scrise între ghilimele. Exemplu:”program”,”CalculaTor”.
c)Variabile
Pentru a putea utiliza informaţiile ce pot fi prelucrate prin intermediul programelor, trebuie să
folosim denumiri (identificatori), care să fie compuşi din – litere, cifre şi liniuţa de subliniere
(caracterul underscore) - maxim 31 caractere.
Numim variabilă o denumire (identificator) pe care compilatorul o asociază cu o anumită zonă
de memorie. Când se declară o variabilă, trebuie specificat numele ei cât şi tipul de date
asociat. Exemple:
int a variabila a este de tip întreg
float b variabila b este de tip real
char d variabila d este de tip caracter
void variabila fără tip
Limbajul C++ este case sensitive, adică face diferenţa dintre literele mici şi mari, astfel încât,
două denumiri de variabile sau de funcţii, care sunt identice dar sunt scrise o dată cu litere
mici iar apoi cu litere mari, se consideră ca fiind două denumiri de variabile sau de funcţii
diferite. Variabilele pot fi:
Operatorii +, -, /, * pot fi utilizaţi cu orice tip de dată, pe când operatorul modulo poate fi
folosit doar cu datele de tip întreg. Operatorul modulo reţine restul unei împărţiri întregi.
Aplicație
Folosind un mediu de dezvoltare al programelor scrise cu ajutorul limbajului C++(Code Blocks,
MinGW, Borland C++, Dev C++) scrie și urmărește execuția programului de mai jos:
#include <iostream>
using namespace std;
int main()
{
int a,b=8;
float x,y;
char c='a',d='b';
a=5;
x=3.14;y=2;
cout<<a+b<<endl;
cout<<a-x<<endl;
cout<<b-y<<endl;
cout<<a/x<<endl;
cout<<c<<d<<endl;
cout<<c+d<<endl;
cout<<c-d<<endl;
cout<<b%a<<endl;
cout<<a+c<<endl;
cout<<x-d;
}
b)Operatori relaționali
Rezultatul unui operator relaţional nu poate fi decât true (sau 1), respectiv false (sau 0).
Prefixaţi Postfixaţi
++ operand operand --
-- operand operand ++
Diferenţa dintre operatorii postfixaţi şi operatorii prefixaţi este aceea că dacă operandul
este postfixat atunci mai întâi se foloseşte valoarea lui nemodificată, iar apoi se aplică
operatorul respectiv. Dacă operandul este prefixat atunci mai întâi se aplică operatorul
respectiv şi abia apoi se foloseşte valoarea lui.
Aplicație.Folosind un mediu de dezvoltare al programelor scrise cu ajutorul limbajului C++(Code
Blocks, MinGW, Borland C++, Dev C++) scrie și urmărește execuția programului de mai jos:
#include <iostream>
using namespace std;
int main()
{
int a=5,b=7;
cout<<(a>b)<<endl;
cout<<(a<b)<<endl;
cout<<(a!=b)<<endl;
cout<<(a==b)<<endl;
cout<<a++<<endl;
cout<<a<<endl;
a++;b--;
cout<<a<<endl;
cout<<b<<endl;
cout<<++b<<endl;
cout<<b++<<endl;
cout<<a--+b<<endl;
cout<<--a+b<<endl;
}
d)Operatorii logici
Rezultatul unui operator logic nu poate fi decât true (sau 1), respectiv false (sau 0). Tabelul de
adevăr este prezentat mai jos:
e)Operatorii de asignare(atribuire)
#include <iostream>
using namespace std;
int main()
{
int a=10,b=15;
cout<<((a>b)&&(a==b))<<endl;
cout<<((a<=b)||(a>=b))<<endl;
cout<<((a!=b)&&(a==(b-5)||(b==b)))<<endl;
a+=b;
cout<<a<<endl;
b*=a;
cout<<b<<endl;
b/=a;
cout<<b<<endl;
a%=b;
cout<<a;
}
f)Operatorul condițional
#include <iostream>
using namespace std;
int main()
{
int a=10,b=15;
char c='A';
cout<<(a>b?"DA":"NU")<<endl;
cout<<a/b<<endl;
cout<<(float)a/b<<endl;
cout<<c<<endl;
cout<<(int)c<<endl;
cout<<sizeof(c)<<"octet"<<sizeof(a)<<"octeti"<<sizeof(b)<<"octeti ";
}
3.Scrieţi un program care citeşte de la tastatură un număr natural cu trei cifre şi care
afişează apoi numărul obţinut prin eliminarea cifrei din mijloc.
7.Se citeşte de la tastatură un număr n. Să se verifice dacă este un număr pozitiv sau
negativ.
{
int x=2, y=7, z,u;
u=x*(y-2)%3;
cout<<”u=”<<u<<endl;
z=u+x;
x=x*y;
cout<<”x=”<<x<<” y=”<<y<<” z=”<<z<<” u=”<<u<<endl;
x=-y*z%3+u;
cout<<”x=”<<x<<endl;
z=(x-y)*(u-x);
cout<<”z=”<<z<<endl;
}
10. Scrieţi un program care converteşte gradele Celsius în grade Fahrenheit conform
formulei f=(9/5)*c+32. Datele se citesc de la tastatură.
12. Se introduc 2 numere. Să se afişeze un mesaj dacă aceste numere sunt consecutive.
13. Fie variabilele x,y şi u de tipul int. Scrieţi o instrucţiune care măreşte valoarea
variabilei u cu câtul întreg al împarţirii lui x la y ?
14. Scrieţi 3 valori ce pot fi citite pentru variabila y astfel încât programul de mai jos
să tipărească 1 ?
{int x=2, y, z;
cin>>y;
x++;
z=y+3*x;
cout<<((z%2==0 && x>=1) ? 1 : 0 );
}
15. Ce se afişează în urma execuţiei secvenţei de instrucţiuni de mai jos, dacă pentru n
se citeşte valoarea 815?
{
int n, a, b, c, x, w, q;
cout<<"n="; cin>>n;
a=n/100;
b=n/10%10;
c=n%10;
(a>b ? x=a, a=b, b=x : x);
(b>c ? x=b, b=c, c=x : x);
(a>b ? x=a, a=b, b=x : x);
cout<<a<<" "<<b<<" "<<c<<endl;
w=a*100+b*10+c;
q=c*100+b*10+a;
cout<<w<<" "<<q;
}