[C++] Zrozumienie działania pętli for
Ostatnio zmodyfikowano 2017-06-01 14:16
kolt Temat założony przez niniejszego użytkownika |
[C++] Zrozumienie działania pętli for » 2017-05-31 12:59:40 Cześć. Jest to mój pierwszy post więc witam wszystkich użytkowników. Jestem świeżynką jeśli chodzi o programowanie i dopiero uczę się podstaw. Zacząłem od kursów na tej oraz innych stronach, potem w moje ręce trafiła książka Prata Język C++ - Szkoła programowania. Przerabiam ją rozdział po rozdziale i czasami nie wszystko rozumiem (przechodzę jednak dalej bo zauważyłem, że przerabiając kolejne rozdziały rozjaśnia mi się to co było wcześniej niezrozumiałe). Obecnie jestem przy rozdziale 6 i mam problem ze zrozumieniem działania programu z Listingu 6.14:
#include <iostream>
const int Max = 5;
int main() { using namespace std; int golf[ Max ]; cout << "Please enter your golf scores.\n"; cout << "You must enter " << Max << " rounds.\n"; int i; for( i = 0; i < Max; i++ ) { cout << "round #" << i + 1 << ": "; while( !( cin >> golf[ i ] ) ) { cin.clear(); while( cin.get() != '\n' ) continue; cout << "Please enter a number: "; } } double total = 0.0; for( i = 0; i < Max; i++ ) total += golf[ i ]; cout << total / Max << " = average score " << Max << " rounds\n"; return 0; }
Rozumiem jak działa pętla czyszcząca strumień w przypadku podania nieprawidłowych danych ale nie rozumiem kolejności działania pętli która zlicza sumę potrzebną do średniej (tutaj nazwana "//calculate average"). Czy obie pętle for działają równocześnie, tzn. kiedy wprowadzamy poprawne dane to od razu są one sumowane tutaj: total += golf(i) ? Chodzi mi o wyjaśnienie w jakiej kolejności dokładnie się to odbywa. Będę wdzięczny jeśli ktoś mógłby mi łopatologiczne napisać co się po kolei dzieje w tym programie (im dokładniej, tym lepiej). pozdrawiam |
|
darko202 |
» 2017-05-31 13:46:23 |
|
pekfos |
» 2017-05-31 14:23:59 Czy obie pętle for działają równocześnie, tzn. kiedy wprowadzamy poprawne dane to od razu są one sumowane tutaj: total += golf(i) ? |
Nic nie jest wykonywane równolegle samo z siebie. Wszystkie pętle w C++ działają tak samo. Możesz zapisać while za pomocą for i vice versa. |
|
kolt Temat założony przez niniejszego użytkownika |
» 2017-05-31 14:28:27 Dziękuję darko202, na pewno używanie debugera będzie mi się przydawać w przyszłości. Z przeprowadzonych testów wyszło mi, że jest tak jak pisałem - czyli każda poprawna wartość jest wprowadzana do tablicy i sumowana z totalem (a wartości niepoprawne pomijane). Obie pętle for działają niemal jednocześnie. Przerobiłem lekko program i również działa poprawnie (wsadziłem wszystko w jedną pętlę for):
#include <iostream>
const int Max = 5;
int main() { using namespace std; int golf[ Max ]; cout << "Please enter your golf scores.\n"; cout << "You must enter " << Max << " rounds.\n"; int i; double total = 0.0; for( i = 0; i < Max; i++ ) { cout << "round #" << i + 1 << ": "; while( !( cin >> golf[ i ] ) ) { cin.clear(); while( cin.get() != '\n' ) continue; cout << "Please enter a number: "; } total += golf[ i ]; } cout << total / Max << " = average score " << Max << " rounds\n"; return 0; }
Czy mój przerobiony program ma jakieś wady w stosunku do pierwszego? Z testów wynika, że działa tak samo. |
|
pekfos |
» 2017-05-31 14:47:30 Teraz tablica jest niepotrzebna. |
|
kolt Temat założony przez niniejszego użytkownika |
» 2017-05-31 14:57:32 Faktycznie pekfos, nie zauważyłem tego. Działa teraz bez tablicy. W takim razie ostatnie pytanie - które rozwiązanie jest preferowane, z tablicami czy bez? Czy w ogóle jest sens się nad tym zastanawiać czy raczej to kwestia preferencji programisty? |
|
pekfos |
» 2017-05-31 16:30:08 Jeśli się da, nie wczytuj wszystkich elementów, żeby dopiero potem coś z nimi zrobić. W ten sposób nie masz ograniczenia na ilość elementów, a kod jest prostszy. Czasami charakterystyka zadania wymaga zastosowania tablicy, np wczytaj elementy i wypisz w odwrotnej kolejności, albo posortowane. |
|
kolt Temat założony przez niniejszego użytkownika |
» 2017-06-01 14:16:33 Rozumiem i dzięki za wszystkie porady. |
|
« 1 » |