• 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

Object Storage Arubacloud
0 głosów
190 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,360 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,360 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,360 p.)
Zamieniając operację na dzielenie nadal nie sprawdzisz całej tablicy.

Podobne pytania

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

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...