👤

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ăspuns :

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.

Vezi imaginea Andrei750238