Jump to content

[C++] Maximul și minimul pentru un număr oarecare de valori


Andreigl
 Share

Recommended Posts

Pentru a afla maximul dintr-un număr oarecare de valori, creăm o nouă variabilă, o egalăm cu 0, citim pe rând fiecare valoare și comparăm variabila creată de noi cu numărul citit. Dacă numărul citit este mai mare ca această variabilă, atunci setăm ca maximul (variabila noastră) să fie egală cu numărul citit.

 

int main()
{
	int Maxim = 0, Numar;
	int Valori; std::cin >> Valori;

	for (int contor = 0; contor < Valori; contor++)
	{
		std::cin >> Numar;
		if (Numar > Maxim)
			Maxim = Numar;
	}

	std::cout << Maxim;
}

 

Pentru a afla minimul dintr-un număr oarecare de valori, creăm o variabilă și o egalăm cu valoarea maximă care apare în acel șir (trebuie să fie specificat), dacă nu, o egalăm cu 2^32. Citim fiecare număr și comparăm variabila noastră minim cu acest număr.

 

Presupunem că valoarea maximă este 5000.

int main()
{
	int Minim = 5000, Numar;
	int Valori; std::cin >> Valori;

	for (int contor = 0; contor < Valori; contor++)
	{
		std::cin >> Numar;
		if (Minim > Numar)
			Minim = Numar;
	}

	std::cout << Minim;
}

 

O problemă (link: https://www.pbinfo.ro/probleme/82/minmax):

Se citește n, apoi încă n numere întregi. Calculați valoarea minimă și valoarea maximă a celor n numere date, știind că n este cuprins între 0 și 1000, iar numerele de pe a 2-a linie vor fi mai mici decât 1.000.000. Citirile / intrările se fac cu ajutorul librăriei fstream.

 

#include <fstream>

int main()
{
	std::ifstream file_in("minmax.in");
	std::ofstream file_out("minmax.out");

	int N; file_in >> N;
	int Maxim, Minim, Numar;
	Maxim = 0, Minim = 1000000;

	for (int contor = 0; contor < N; contor++)
	{
		file_in >> Numar;

		if (Numar > Maxim)
			Maxim = Numar;
		if (Minim > Numar)
			Minim = Numar;
	}

	file_out << Minim << Maxim;
}

 

Vom avea nevoie de un singur for
În acest for vom afla maximul, cât și minimul.

Pur și simplu facem exact ce am spus mai sus: 

  • creăm o variabilă maxim, o egalăm cu 0
  • creăm o variaiblă minim, o egalăm cu valoarea maximă din șir
  • citim pe rând fiecare număr din șir și:
  1.  comparăm dacă numărul citit este mai mare ca maxim, dacă da, egalăm maximul nostru cu numarul citit
  2.  comparăm dacă variabila minim este mai mare ca numărul citit, dacă da, egalăm minim cu numarul citit
Link to comment
Share on other sites

On 1/24/2020 at 10:24 AM, shanker' said:

O problemă (link: https://www.pbinfo.ro/probleme/82/minmax):

Se citește n, apoi încă n numere întregi. Calculați valoarea minimă și valoarea maximă a celor n numere date, știind că n este cuprins între 0 și 1000, iar numerele de pe a 2-a linie vor fi mai mici decât 1.000.000. Citirile / intrările se fac cu ajutorul librăriei fstream.

 


#include <fstream>

int main()
{
	std::ifstream file_in("minmax.in");
	std::ofstream file_out("minmax.out");

	int N; file_in >> N;
	int Maxim, Minim, Numar;
	Maxim = 0, Minim = 1000000;

	for (int contor = 0; contor < N; contor++)
	{
		file_in >> Numar;

		if (Numar > Maxim)
			Maxim = Numar;
		if (Minim > Numar)
			Minim = Numar;
	}

	file_out << Minim << Maxim;
}

 

Ca o mica observatie, daca toate numerele sunt negative, care va fi maximul? Conform algoritmului, ar fi 0. Nu exista in problema nicio restrictie privind numerele mai mici decât 0. Stiind ca n > 0, avem siguranța că se va citi cel puțin un numar, asadar ai putea inițializa maximul și minimul cu prima valoare.

 

#include <fstream>

int main()
{
	std::ifstream file_in("minmax.in");
	std::ofstream file_out("minmax.out");

	int N; file_in >> N;
	int Maxim, Minim, Numar;
	file_in>>Numar;
  	Maxim = Numar;
  	Minim = Numar;

	for (int contor = 0; contor < N-1; contor++)
	{
		file_in >> Numar;

		if (Numar > Maxim)
			Maxim = Numar;
		if (Minim > Numar)
			Minim = Numar;
	}

	file_out << Minim << Maxim;
}

Pentru o serie de valori, spre exemplu:

3
-3 -2 -5

conform algoritmului tau, maximul ar fi 0. Conform corecției, ar fi -2. Desigur, nu e singura metoda.

Link to comment
Share on other sites

1 minute ago, shanker' said:

@Clanin3,

 

Vezi restricțiile problemei.

image.png

 

Totuși, ai dreptate, la asta chiar nu mă gândisem, dar în cazul nostru (despre problemă vorbesc), nu e cazul.

n este numarul de valori care vor fi citite de pe a doua linie.

image.png

 

Link to comment
Share on other sites

@Clanin3, @shanker'

DATE DE INTRARE PROBLEMA:

Fişierul de intrare minmax.in conţine pe prima linie numărul n si pe a doua linie n numere naturale separate prin spaţii.

 

Despre numere naturale: https://ro.wikipedia.org/wiki/Număr_natural

Long story short: Numar natural = orice numar intreg >= 0. Nu se pune problema numerelor negative aici. Citim problema si dupa ne dam cu presupusul, zic.

 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.