locf Temat założony przez niniejszego użytkownika |
Pętle - for » 2015-12-18 21:06:44 Witam ponownie Mam zadanie o treści: "Napisz program wczytujący ze standardowego wejścia trzy dodatnie liczby całkowite n, m i k, i wypisujący w kolejnych wierszach wszystkie wielokrotności n większe od m i mniejsze od k" Moje rozwiązanie. Nie wiem jak zapisać, aby jednocześnie były spełnione dwa warunki: n*i>m && n*i<k Dla n=2, m=3, k= 12 mam wynik 246810, podczas gdy moim zdaniem powinno to być: 4,6,8,10. Proszę o podpowiedź i wskazanie co robię nieprawidłowo. #include <iostream>
using namespace std;
int main() { int m, n, k; cout << "Podaj liczbe n :"; cin >> n; cout << "Podaj liczbe m :"; cin >> m; cout << "Podaj liczbe k :"; cin >> k; for( int i = 1; n * i > m, n * i < k; i++ ) { cout << i * n; } return 0; }
|
|
pekfos |
» 2015-12-18 21:12:21 Logiczne "i" to &&, a nie przecinek. |
|
locf Temat założony przez niniejszego użytkownika |
» 2015-12-18 21:24:21 Próbowałem już wcześniej wstawiać &&, ale jeśli wstawię &&, to nie mam żadnego wyniku. #include <iostream>
using namespace std;
int main() { int m, n, k; cout << "Podaj liczbe n :"; cin >> n; cout << "Podaj liczbe m :"; cin >> m; cout << "Podaj liczbe k :"; cin >> k; for( int i = 1;( n * i > m ) &&( n * i < k ); i++ ) { cout << i * n; } return 0; }
|
|
pekfos |
» 2015-12-18 21:57:10 Bo pomysł jest zły. W warunku pętli zostaw tylko n * i < k, a n * i > m użyj w if wewnątrz pętli dla odfiltrowania części wyników. |
|
ArgonZapan |
» 2015-12-21 23:19:10 for( m =( m / n ) * n + n; m < k; m += n ) { cout << m; }
Btw. argc/argv[] <- wejście standardowe |
|
mateczek |
» 2015-12-22 12:28:52 #include <iostream> using namespace std; int main() { int n, m, k, w = 0; cin >> n >> m >> k; while( true ) { w += n; if( w <= m ) continue; if( w = k ) break; cout << w << endl; } }
Po to są inne pętle by z nich korzystać !!! pętla for nadaje się do przeglądania kontenera czy tablicy o znanej liczbie składników !!! można żonglować tą pętlą tylko po co jak przy pomocy innych jest czytelniej i wygodniej !!! #include <iostream> using namespace std; int main() { string s = "ala ma tygrysa"; for( char znak: s ) { cout << znak << endl; } cout << s << endl; for( char & znak: s ) { if( znak >= 97 ) znak = znak - 32; } cout << s << endl; }
|
|
ArgonZapan |
» 2015-12-22 15:00:01 #include <iostream> using namespace std; int main() { int n, m, k, w = 0; cin >> n >> m >> k; while( true ) { w += n; if( w < m ) continue; if( w > k ) break; cout << w << endl; } } zgodzę się, że taki sposób jest czytelniejszy, ale czy wydajniejszy ? Np dla: n = 2 m = 1000 k = 1004 twoja pętla wykona się 502 razy, aby wypisać jeden wynik = 1002 Moja pętla wykona się tyle razy, ile jest dokładnych wyników rozwiązania. Oczywiście są to skrajne przypadki. no ale przekształćmy moją pętle, pod pętle while. #include <iostream> using namespace std; int main() { int n, m, k, w = 0; cin >> n >> m >> k; w =( m / n ) * n + n; while( w < k ) { cout << w << endl; w += n; } } I teraz w jaki sposób różni się czytelność kodu ? 6 linia kodu, to warunek początkowy. 7 linia kodu, to warunek zakończenia się pętli. 9 linia kodu, zwiększenie licznika. Czyli zasada działania taka sama, różnica wynika tylko w ilości linijek kodu. Ja osobiście, w takich przypadkach, wolę pętle for, bo zajmuje mniej linii kodu, inni powiedzą że pętle while, bo jest dla nich czytelniejsza. Ale stwierdzenie, że któraś pętla bardziej się nadaje, jest dla mnie błędne. |
|
locf Temat założony przez niniejszego użytkownika |
» 2015-12-24 10:58:53 Dziękuję za pomoc. Ostatnio w rozjazdach, dopiero dzisiaj będę miał czas przysiąść nad tym zagadnieniem. |
|
« 1 » 2 |