Se citeste de la tastatura un numar natural nenul n, apoi se citesc succesiv n valori reale. Scrieti un program care determina si afiseaza cea mai mare si cea mai mica valoare reala citita. Rezolvati problema in 2 moduri: prima data folosind instructiunea FOR, si apoi folosind instructiunea WHILE.
Răspunsuri la întrebare
Mai jos rezolvarea in 2 moduri in C++
I. cu instructiunea for
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
double x, maxi = -100000, mini = 100000;
for (int i = 1; i <= n; ++i)
{
cin >> x;
if (x >= maxi)
{
maxi = x;
}
if (x <= mini)
{
mini = x;
}
}
cout << maxi << " " << mini;
return 0;
}
II. cu instructiunea while (exact la fel, doar ca inlocuiesti for-ul cu while)
#include <iostream>
using namespace std;
int main()
{
int n, i = 1;
cin >> n;
double x, maxi = -100000, mini = 100000;
while (i <= n)
{
cin >> x;
if (x >= maxi)
{
maxi = x;
}
if (x <= mini)
{
mini = x;
}
i++;
}
cout << maxi << " " << mini;
return 0;
}
► SOLUTIE FOR :
#include <iostream>
#include <float.h>
using namespace std;
int main() {
int n;
double curent;
double mx = -DBL_MAX;
double mn = DBL_MAX;
//Citire dimensiune sir elemente
cout << "Introduceti numarul de elemente : ";
cin >> n;
if (n == 0) {
cout << "Sirul nu poate fi vid !";
return 0;
}
cout << "Introduceti elementele : ";
for (int i = 0; i < n; i++) {
//Citeste valoarea curenta
cin >> curent;
//Actualizeaza minim si maxim daca e nevoie
if (curent > mx) mx = curent;
if (curent < mn) mn = curent;
}
//Afisare rezultat
cout << "\nMinim : " << mn;
cout << "\nMaxim : " << mx;
return 0;
}
► SOLUTIE WHILE :
#include <iostream>
#include <float.h>
using namespace std;
int main() {
int n;
int i = 0;
double curent;
double mx = -DBL_MAX;
double mn = DBL_MAX;
//Citire dimensiune sir elemente
cout << "Introduceti numarul de elemente : ";
cin >> n;
if (n == 0) {
cout << "Sirul nu poate fi vid !";
return 0;
}
cout << "Introduceti elementele : ";
while (i<n) {
//Citeste valoarea curenta
cin >> curent;
//Actualizeaza minim si maxim daca e nevoie
if (curent > mx) mx = curent;
if (curent < mn) mn = curent;
//Incrementeaza numarul de elemente citite
i++;
}
//Afisare rezultat
cout << "\nMinim : " << mn;
cout << "\nMaxim : " << mx;
return 0;
}
► Explicatie :
Deoarece e nevoie sa trecem prin sirul de valori o singura data nu e necesar sa memoram sirul de numere. Citim fiecare valoare si determinam daca trebuie actualizat minim/maxim sau nu.
Initializam valoarea minima si valoarea maxima cu cel mai mare numar reprezentabil in C++ pentru tipul double, respectiv cel mai mic numar reprezentabil in C++ pentru tipul double.
Numarul DBL_MAX e o constanta declarata in fisierul header float.h care retine cel mai mare numar care poate fi retinut intr-un double. Intervalele sunt simetrice pentru plus si minus, din acest motiv -DBL_MAX e cel mai mic numar care poate fi retinut.
Alternativ puteam initializa minimul si maximul cu primul element din sir.
► Amintim :
Toate instructiunile repetitive (FOR, WHILE, DO...WHILE) sunt echivalente si se poate transforma dintr-o forma in alta fara prea mari batai de cap.