Wczytywanie liczb z zakresu, wypisanie zapamiętanych

0

Muszę napisać program, który wczytuje liczby całkowite z zakresu 0 do 5000. Zakres ten nie ulegnie zmianie. Jeśli wprowadzona liczba jest spoza zakresu, program ma odrzucić liczbę i wczytywać dalej. Natomiast jeśli wprowadzi się -1, program ma wypisać wszystkie zapisane liczby i posortowane rosnąco.

Nie wiem kompletnie jak się do tego zabrać, bo dopiero zaczynam przygodę z programowaniem.. Proszę o szybką pomoc. z góry dziękuje.

0

Bardzo chętnie pomożemy. Wczytuj liczby za pomocą std::cin, za kontener użyj std::vector. Czy masz jakiś konkretny problem?

0
#include "pch.h"
#include <iostream>
#include <vector>

using namespace std;

vector <int> wczytane;
int n;

int main()
{
	cin >> n;

	if (n <= 5000 && n >= 0)
	{
		wczytane.push_back(n);
	}
	if (n > 5000 && n < -1)
	{
		wczytane.push_back(NULL);
	}
	else
	{
		for (auto i = 0; i < wczytane.size(); i++)
		{
			cout << wczytane[i];
		}
	}
	return 0;
}

Próbowałem zrobić tak, natomiast nie jestem do końcaa przekonany, jak to ma działać.

1

Nie używaj zmiennych globalnych, to nie ma sensu.

Podziel kod na część wczytującą i wypisującą. Na razie wczytujesz jedną liczbę, i nawet nie dodajesz jej do wektora. Popraw to na pętlę wczytującą i dodawaj wczytane liczby do wektora, a potem martw się o ich wypisanie.

0

Jeśli mam pętlę wczytującą (użyłem for), w jaki sposób mam wyłapać te liczby, które nie są z podanego zakresu?

1

if

0
using namespace std;

vector <int> wpisane;

int main()
{
	int n;

	for (;;)
	{
		cin >> n;
		if (n >= 0 && n <= 5000)
			wpisane.push_back(n);
		else 

	}
	return 0;

}

ok, zawiesiłem się bo nie wiem jakie warunki dać

1

Dobre dałeś. Tylko jeszcze musisz sprawdzić czy wczytanie się powiodło.

0

Czy muszę dodać coś jeszcze żeby mi ignorowało liczby spoza zakresu czy tak jest ok?

0

Już Ci je ignoruje (nie trafiają one do wektora). Brakuje Ci tylko przerywania pętli przy -1.

0
#include "pch.h"
#include <iostream>
#include <vector>

using namespace std;

vector <int> wpisane;

int main()
{
	int n;

	for (;;)
	{
		cin >> n;
		if (n >= 0 && n <= 5000)
			wpisane.push_back(n);
		if (n == -1) {
			for (int i = 0; i < wpisane.size(); i++)
			{
				cout << wpisane[i] << endl;

			}
		}
	}

	
	return 0;

}

to już mam gotowe, ładnie wczytuje i pomija liczby spoza zakresu, wypisuje też przy wpisaniu -1.. Tylko teraz kwestia sortowania. W jaki sposób mam to zrobić ?

1

Jeśli nie ma ku temu przeciwwskazań (czytaj: nikt Ci tego nie zabronił), to użyj std::sort. Jeśli są, to zapytaj ulubionej wyszukiwarki o jakiś algorytm sortujący i go zaimplementuj — dla początkującego najprostsze będzie chyba sortowanie bąbelkowe (ang. „bubble sort”).

0
#include "pch.h"
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

vector <int> wpisane;

int main()
{
	int n;

	for (;;)
	{
		cin >> n;
		if (n >= 0 && n <= 5000)
			wpisane.push_back(n);
		if (n == -1) {
			for (int i = 0; i < wpisane.size(); i++)
			{
				sort(wpisane.begin(), wpisane.end());
				cout << wpisane[i] << " ";

			}
		}
	}

	
	return 0;

}

No i gotowe! Dzięki wielkie za pomoc!

1

Drobne uwagi, jeśli faktycznie planujesz dalej programować:

  • nie używaj zmiennych globalnych o ile to nie jest niezbędne (a bardzo, bardzo rzadko tak jest)
  • if ma prawie zawsze alternatywę w postaci else, więc tutaj if, if lepiej by zamienić na if, else if. Nawet nie chodzi tu o wydajność, bo dawno pominęliśmy ten etap w złożoności kompilatorów, ale o czytelność dla drugiego programisty: jasno dajesz do zrozumienia, że wywołanie obu gałęzi się wzajemnie wyklucza, co nie jest oczywiste w przypadku podwójnego ifa
  • lepiej by wyglądało gdybyś sortowanie + wypisanie przeniósł poza pętlę wczytującą, a po otrzymaniu -1 po prostu ją zakończył.

Przy czym skoro działa to działa ;​)

0

Dziękuję bardzo za uwagi! Na pewno będą pomocne w dalszych problemach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1