[C++] Wczytywanie liczb i działania na nich.

mich12
Użytkownik
Użytkownik
Posty: 180
Rejestracja: 13 paź 2013, o 13:41
Płeć: Mężczyzna
Podziękował: 29 razy

[C++] Wczytywanie liczb i działania na nich.

Post autor: mich12 »

Witajcie

Bardzo proszę o pomoc. Jak mogę zrobić, żeby wartość minimalna, maksymalna oraz średnia arytmetyczna została wypisywana na wyjście z programu dla każdego zestawu, a nie tylko dla ostatniego wprowadzonego zestawu? Załączam kod.

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int main ()
{
int setnumber;
float a;
float b;
float c;
float d;
float e;
float max;
float min;
float summary;

summary = a + b + c + d + e;
	
cin >> setnumber;
   while (setnumber > 0) {
      cin >> a >> b >> c >> d >> e;
      setnumber--;
	
	max = a;
	if ( b > max ) max = b;
	if ( c > max ) max = c;
	if ( d > max ) max = d;
	if ( e > max ) max = e;
	
	min = b;
	if (a < min) min = a;
	if (c < min) min = c;
	if (d < min) min = d;
	if (e < min) min = e;
	
}	
	cout << max << " " << min << " " << summary / 5 << endl;	
}
EDIT:
Udało mi się to zrobić z tablicami, jednak problem pozostaje wciąż ten sam :/
Kod:

Kod: Zaznacz cały

// Michał Siczek
#include <iostream>
using namespace std;

int main ()
{
int setnumber;
float max;
float min;
float summary;
int input;

	
cin >> setnumber;
while (setnumber > 0) {
      setnumber--;
      
      int data[input];
      
      for(int i = 0; i < 5; ++i)
			  cin >> data[i];
			
      for(int i = 0; i < 5; ++i){
	  		  max = data [0];
			  if ( data [1] > max ) max = data [1];
			  if ( data [2] > max ) max = data [2];
			  if ( data [3] > max ) max = data [3];
			  if ( data [4] > max ) max = data [4];
	
			  min = data [1];
			  if (data [0] < min) min = data [0];
			  if (data [2] < min) min = data [2];
			  if (data [3] < min) min = data [3];
			  if (data [4] < min) min = data [4];
			  }	
	summary = data[0] + data[1] + data [2] + data [3] + data [4];
	cout << max << " " << min << " " << summary / 5 << endl;
	}	
}
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Wczytywanie liczb i działania na nich.

Post autor: kalwi »

Po pierwsze - może przemyśl schemat działania programu. Bo jakbyś miał tych liczb 1000 to też byś sprawdzał po kolei wszystko?

Po drugie - skoro main jest typu int, to powinien coś zwracać (czyli return 0), aczkolwiek to jakiś wielki błąd nie jest, a raczej dobra praktyka.

Po trzecie - formatowanie. Skoro int main jest najbardziej do lewego marginesu, to int setnumber i wszystko dalej powinno być przesunięte o jeden tabulator w prawo.

Po czwarte - nazewnictwo. Kod programu to jest tak jakby historia, która o czymś mówi. Mi na przykład nazwa zmiennej setnumber nic nie mówi, a powinna. Lepszą nazwą byłoby iterations (

Kod: Zaznacz cały

https://en.wikipedia.org/wiki/Iteration
)

Po piąte - jeśli już nazywasz coś setnumber to albo wybierz schemat nazewnictwa set_number albo setNumber. Możesz sobie o tym poczytać np. tu

Kod: Zaznacz cały

https://google.github.io/styleguide/cppguide.html


Po szóste, ale to już takie czepianie się trochę na siłę (aczkolwiek bardzo mile widziane przez prowadzących) - zmienne, które będą określały rozmiar tablicy (albo ogólnie, rozmiar czegoś, który będzie zawsze nieujemny i całkowity) to się stosuje typ size_t (czytaj: size_type, czyli "typ reprezentujący rozmiar czegoś (np. tablicy)"). W praktyce na 99% komputerach to będzie równoważne unsigned long int, ale stosuje się to z powodów czysto czytelnościowych. Patrzysz na kod, który ma tysiąc linijek, widzisz sobie coś typu size_t i wiesz od razu, do czego to mniej więcej służy

Po siódme - formatowanie kodu raz jeszcze.

Kod: Zaznacz cały

 if ( data [1] > max ) max = data [1];
           if ( data [2] > max ) max = data [2];
           if ( data [3] > max ) max = data [3];
           if ( data [4] > max ) max = data [4];
Tak się staraj nie pisać, bo łatwo czegoś nie zauważyć potem. Już lepiej poświęcić te parę enterów imo.

Po ósme - ten fragment jest nieoptymalny.

Kod: Zaznacz cały

 while (setnumber > 0) {
      setnumber--;
      
      int data[input];
Tutaj zaalokuje i zwolni się pamięc dla tablicy data setnumber-razy.

Po dziewiąte - nie umiesz korzystać z tablic. Piszesz int data[input];, a zmienna input i tak nie ma ustalonej żadnej wartości, a tablica zawsze ma 5 elementów zajętych.

Po dziesiąte

Kod: Zaznacz cały

#include <iostream>
#include <iomanip>
using namespace std;

int main(void)
{
	size_t iterations;
	const size_t TAB_SIZE = 5;
	int data[TAB_SIZE], max, min, sum;

	cout << "Ile razy ma zostac wykonana ta operacja: ";
	cin >> iterations;

	for(size_t i = 0; i < iterations; ++i)
	{
		for(size_t j = 0; j < TAB_SIZE; ++j)
			cin >> data[j];
		sum = max = min = data[0];
		for(size_t k = 1; k < TAB_SIZE; ++k)
		{
			if(data[k] < min)
				min = data[k];
			if(data[k] > max)
				max = data[k];
			sum += data[k];
		}
		cout << endl << "min: " << min << endl << "max: " << max << 
		 	 endl << "suma: " << sum << endl << setprecision(2) << "srednia: " << 
		 	 float(sum)/TAB_SIZE << endl << endl;
	}
	return 0;
}
ODPOWIEDZ