Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pętle - for

Ostatnio zmodyfikowano 2016-01-01 15:49
Autor Wiadomość
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.
C/C++
#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;
}
P-142130
pekfos
» 2015-12-18 21:12:21
C/C++
n * i > m, n * i < k
Logiczne "i" to &&, a nie przecinek.
P-142131
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.

C/C++
#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;
}
P-142132
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.
P-142134
ArgonZapan
» 2015-12-21 23:19:10
C/C++
for( m =( m / n ) * n + n; m < k; m += n )
{
    cout << m;
}

Btw. argc/argv[] <- wejście standardowe
P-142232
mateczek
» 2015-12-22 12:28:52
C/C++
#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; //<=jak bez granicznych
       
        if( w = k ) break; // jak wyżej
       
        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 !!!

C/C++
#include <iostream>
using namespace std;
int main() {
    string s = "ala ma tygrysa";
    //przeglądanie stringa znak po znaku tu się for nada i zapis jest prosty i czytelny!!!
    for( char znak: s ) {
        cout << znak << endl;
    }
    //  lub podmianka powiedzmy liter z małych na wielkie
    cout << s << endl;
    for( char & znak: s ) {
        if( znak >= 97 ) znak = znak - 32;
       
    }
    cout << s << endl;
}
P-142236
ArgonZapan
» 2015-12-22 15:00:01
C/C++
#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; //<- tutaj jest błąd bo gdy w == m, zostanie wypisany wynik, a nie powinien
       
        if( w > k ) break; // tutaj tak samo
       
        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.

C/C++
#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.
P-142246
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.
P-142297
« 1 » 2
  Strona 1 z 2 Następna strona