• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Znajdowanie jednocześnie minimum i maksimum

0 głosów
416 wizyt
pytanie zadane 13 stycznia 2023 w C i C++ przez Janchess Początkujący (480 p.)

Cześć, napisałem taki oto program, który w teorii znajduje minimalny i maksymalny element w ciągu. W praktyce jednak podaje błędne odpowiedzi. W visual studio otrzymuje jedynie ostrzeżenie przy porównaniu if (t[1] > t[0]) o treści "Odczytywanie nieprawidłowych danych z elementu t" więc być może w tym rzecz ?

int main() {
	int n;
	int max, min;
	cin >> n;
	int* t;
	t = new int[n];
	for (int i = 0; i < n; i++) {
		cin >> t[i];
	}
	if (t[1] > t[0]) {
		max = t[1];
		min = t[0];
	}
	else {
		min = t[1];
		max = t[0];
	}
	for (int i = 2; i <(n%2)+2 ; i += 2){
		if (t[i + 1] > t[i]) {
			if (t[i + 1] > max) max = t[i + 1];
			if (t[i] < min) min = t[i];
		}
		else {
			if (t[i + 1] < min) min = t[i + 1];
			if (t[i] > max) max = t[i];
		}
	}
	
	if (n % 2) {
		if (t[n - 1] > max) max = t[n - 1];
		if (t[n - 1] < min) min = t[n - 1];
	}

	cout << "Maksymalny element to " << max << ", natomiast minimalny wynosi " << min;

	delete[] t;
	return 0;
}

 

1 odpowiedź

+2 głosów
odpowiedź 13 stycznia 2023 przez Great Stary wyjadacz (12,660 p.)

Troszkę przesadzone:

#include <iostream>

int main() {
    int n;
    std::cin >> n;
    if (n < 1) {
        return 1;
    }

    int* t = new int[n];
    for (int i = 0; i < n; i++) {
        std::cin >> t[i];
    }

    int min = t[0];
    int max = t[0];
    for (int i = 1; i < n; ++i) {
        if (t[i] < min) min = t[i];
        if (t[i] > max) max = t[i];
    }

    //auto [min, max] = std::minmax_element(t, t + n); // *min, *max

    std::cout << "Maksymalny element to " << max << ", natomiast minimalny wynosi " << min;
    delete[] t;
}
komentarz 13 stycznia 2023 przez Janchess Początkujący (480 p.)
Ok, przedstawiłeś własną propozycje, ale jednak chciałbym się dowiedzieć co jest nie tak z moim kodem.
komentarz 13 stycznia 2023 przez Great Stary wyjadacz (12,660 p.)

Pętla może wykonać się maksymalnie raz:

for (int i = 2; i <(n%2)+2 ; i += 2) // i < n ?

Nie jestem pewien czy to jedyny błąd.

komentarz 13 stycznia 2023 przez Janchess Początkujący (480 p.)
Ahh, omyłkowo wpisałem % zamiast /. Teraz wyniki są poprawne.
komentarz 13 stycznia 2023 przez Great Stary wyjadacz (12,660 p.)
Zamieniając operację na dzielenie nadal nie sprawdzisz całej tablicy.

Podobne pytania

0 głosów
2 odpowiedzi 1,520 wizyt
pytanie zadane 1 grudnia 2020 w C i C++ przez CheF123 Początkujący (450 p.)
0 głosów
0 odpowiedzi 798 wizyt
pytanie zadane 25 listopada 2019 w C i C++ przez Plusik Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 547 wizyt
pytanie zadane 24 lutego 2023 w C i C++ przez HUBSON2912 Obywatel (1,560 p.)

93,762 zapytań

142,717 odpowiedzi

323,368 komentarzy

63,359 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...