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

C - petla n,m,k- nie wypisuje

Ostatnio zmodyfikowano 2016-05-12 15:25
Autor Wiadomość
miki313
Temat założony przez niniejszego użytkownika
C - petla n,m,k- nie wypisuje
» 2016-05-12 14:41:22
Treść zadania:
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

Był temat tego zadania ( żeby nie było że nie używam google), http://cpp0x.pl/forum/temat/​?id=21708 ale nie chciałem odkopywać tamtego topicu.


Napisałem, wręcz skopiowałem
C/C++
#include <stdio.h>

main()
{
    int n, m, k, a = 0;
   
    printf( "Podaj liczby n, m oraz k" );
    scanf( "%d %d %d", & n, & m, & k );
   
   
    while( a == k ) {
        a += n;
        printf( "%d", a );
        if( a <= m ) continue;
       
       
       
    }
    return 0;
}



Czytam kod i wszystko wydaje się być git i super, jednak w konsoli podaje liczby i nic mi nie wyskakuje:/

Podaj liczby n, m oraz k1
2
3
i tyle, program nic nie wypisuje.
Gdzie leży błąd?

jeżeli ktoś znajdzie chwilę, to będę także wdzięczny za wytłumaczenie alternatywnego rozwiązania, też z tamtego tematu,
C/C++
for( m =( m / n ) * n + n; m < k; m += n )
{
    cout << m;
}

dzięki :)
P-148144
mateczek
» 2016-05-12 15:10:18
C/C++
#include <iostream>
using namespace std;
main() {
    int n, m, k, wielokrotnosc = 0;
    cout << "Podaj liczby n, m oraz k" << endl;
    cin >> n >> m >> k;
    while(( wielokrotnosc += n ) < k ) { // rób dopóki wielokrotność mniejsza od k;
        if( wielokrotnosc <= m ) continue; // jeśli wielorotość mniejsza od m to pomijaj wyświetlanie
       
        cout << wielokrotnosc << " ";
    }
    cout << endl;
}


wyjaśnienie!!!
C/C++
m =( m / n ) * n + n // to optymalizacja wylicza od której liczby wystartować
//przykład wczytujemy liczby 3 10 20
//10/3*3+3 = 3*3+3=12 // od tego startujemy

z taką optymalizają i przy pomocy pętli while program można napisać tak
C/C++
#include <iostream>
using namespace std;
main() {
    int n, m, k, wielokrotnosc;
    cout << "Podaj liczby n, m oraz k" << endl;
    cin >> n >> m >> k;
    wielokrotnosc = m / n * n; // liczba początkowa
    while(( wielokrotnosc += n ) < k ) { // rób dopóki wielokrotność mniejsza od k;
        cout << wielokrotnosc << " ";
    }
    cout << endl;
}
P-148145
miki313
Temat założony przez niniejszego użytkownika
» 2016-05-12 15:17:01
Dzięki :)
A wiesz czemu "moja" wersja nie działa poprawnie?
P-148146
mateczek
» 2016-05-12 15:25:39
zły warunek

C/C++
while( a == k ) // taka pętla wykona się wówczas gdy a==k. Ponieważ na starcie "a" było mniejsze, pętla się nie wykonywała.
while( a < k ) // tak być powinno jeśli już. To oznacza rób puki "a" mniejsze od "k"

//instrukcja pomijajca "continue" powinna być przed instrukcją wypisującą "printf".
//stawianie instrukcji przerywającej lub pomijającej na końcu pętli nic nie wnosi.[/code]
P-148147
« 1 »
  Strona 1 z 1