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

Konwersja std::pair (C++)

VPS Starter Arubacloud
0 głosów
505 wizyt
pytanie zadane 30 lipca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

Witam piszę program, który ma w pewnej części pokazać najmniejszą i największą wartość.

Do tego kompilator zaproponował mi konwersję poprzez std::pair

int step_result = std::pair <int, int> std::minmax(steps); 

steps jest kilku krotnie podawane w pętli while{} (próbowałem też ....std::minmax(steps, steps);)

komentarz 1 sierpnia 2018 przez adrian17 Ekspert (349,960 p.)

A, odwróciłeś liczby.

int max_steps = std::numeric_limits<int>::max();

jeśli z góry ustawiłeś `max_steps` na maksymalną liczbę, to nic większego się nie znajdzie ;) Miało być 0.

komentarz 1 sierpnia 2018 przez Sic Dyskutant (8,510 p.)

Dobra to wiele zmieniło blush. Dziękuję.

Jednak w wciąż próbuje zmienić działanie 'prób'. Ponieważ  pętla #2 while ( wewnętrzna) zawsze wykonuję się tylko i wyłącznie jeden raz. W momencie gdy z niej całkowicie zrezygnowałem pojawił się kolejny problem z końcowym wynikiem kroków, który wynosił 0 (ponieważ 'steps' było resetowane na początku pętli).

1
komentarz 1 sierpnia 2018 przez adrian17 Ekspert (349,960 p.)
Już mocno na ślepo... jedyny mój strzał jest taki, że jakiejś zmiennej nie resetujesz między próbami.
komentarz 1 sierpnia 2018 przez Sic Dyskutant (8,510 p.)
W jakiś sposób ją znajdę, w każdym razie dziekuję za twój czas i pomoc.
komentarz 1 sierpnia 2018 przez Sic Dyskutant (8,510 p.)

@adrian17,

while(std::cin >> target)
        {
                std::cout << "Podaj długość kroku: ";
                if(!(std::cin >> d_steps))
                        break;
                
                std::cout << "Ile razy próba ma zostać powtórzona: "; std::cin >> n_steps;
                for(int i = 0; i < n_steps; i++){
                        while(result.mag_value() < target)
                        {
                                direction = rand() % 360; 
                                step.reset(d_steps, direction, Vector::POL);
                                std::cout << steps << ": (x,y) = " << result << std::endl;
                                result = result + step;
                                steps++;        
                        } // #2 while
                
                        if(steps > max_steps) max_steps = steps; // maksymalna ilość kroków
                        if(steps < min_steps) min_steps = steps; // minimalna ilość kroków

                        std::cout << steps << ": (x,y) = " << result << std::endl;
                        //wynik
                        std::cout << "Po " << steps << " krokach delikwent osiągnął położenie:\n" << result << std::endl;
                        result.polar_mode();
                        std::cout << " czyli\n" << result << std::endl;
                        std::cout << "Średnia długość kroku pozornego = " << result.mag_value()/steps << std::endl << std::endl;
                        steps = 0;
                } // petla (wyznaczająca ilość prób !

                //zestawienie danych o krokach
                std::cout << "Zestawienie informacji o wykonanych krokach\n";
                std::cout << "Minimalna ilość kroków: " << min_steps << "\nMaksymalna ilość kroków: " << max_steps << "\nŚrednia ilość kroków: " << steps/n_steps << std::endl;

                //zerowanie wartości
                steps = 0;
                result.reset(0.0, 0.0);
                std::cout << "Podaj dystans do przejścia (k, aby zakończyć): ";
        }// #1 while

Niestety moje próby nie dały pełnego sukcesu. Problem jest z pętla 'while', która nie wykonuje ponownie obliczeń (w kolejnych podejściach pętla ją pomija, lecz wykonuje całą resztę).

W przypadku usunięcia pętli zamysł  wytycznych jej poprawny:

- wykonywać n razy (n podaje użytkownik),

- zliczać kroki z każdej próby, wyznaczyć min i max,

- 'target' i 'd_steps' mają być takie same dla wykonywanych prób.

Jednak przez usunięcie 'while' pojawia się błąd w obliczeniach i zlicza tylko do 1 kroków.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+3 głosów
1 odpowiedź 629 wizyt
0 głosów
2 odpowiedzi 583 wizyt
pytanie zadane 1 maja 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 1,205 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Noak Mądrala (5,900 p.)

93,032 zapytań

141,996 odpowiedzi

321,300 komentarzy

62,379 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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...