Wyświetlenie liczb z przedziału podzielnych przez inną liczbę

0

2.3.
Napisz program, który wczyta od użytkownika liczby naturalne n, m, gdzie n < m oraz x, a następnie
wyświetli liczby z przedziału [n,m] podzielne przez x.

Powinno być to zrobione na pętli while, ale dopiero trochę o nią zahaczyliśmy i nie wiem, jak to zrobić. Jak powinna wyglądać ta pętla, żeby to grało? Jeden warunek na pewno będzie taki: while (n<=m), i chyba trzeba będzie zwiększać "n" co obrót, czyli niżej powinno być: n++. Ale pewny tego nie jestem.

0

Bardzo dobrze. Teraz w każdej iteracji musisz sprawdzić, czy n jest podzielne przez x i gotowe.

Sprawdzisz używając modulo - %.

0

Tylko jak tego dokonać? Bo to trzeba jakoś zaznaczyć, że dzielenie ma być całkowite, bez reszty. Bo zwykłym dzieleniem, jak np. zrobię 8/3, to wynik jest 2 na intach, a to nieprawda...

0

Tak jak napisałem, użyj modulo. Jeśli A modulo B = 0, to B jest dzielnikiem A.

0
#include <stdio.h>

int main()
{
    printf ("Podaj dwie liczby naturalne (n i m), takie ze n < m:\n");
    int n,m,x;
    scanf ("%d %d %d", &n, &m, &x);
 
    while (n<=m) {
        if (n%x);
        else printf ("%d\n", n);
        n++;
    }
 
    return 0;
}

http://ideone.com/ZRbirN

coś takiego zrobiłem i chyba działa, jak należy. Może da się piękniej, ale na początek dobrze, że chociaż działa.

dodanie kodu do posta - @furious programming

0

Działa, ale pewnie nie rozumiesz co tu się dzieje:

if (n%x);
else printf ("%d\n", n);

Czytelniej by było porównać wynik n%x do zera i tam printować.

0

No modulo pokazuje resztę z dzielenia. To skoro jest reszta w n%x, to nic nie robi. A w innych przypadkach pokazuje liczbę n, którą z każdym obrotem pętli zwiększa. Bo wtedy n jest podzielne przez x bez reszty.

0
if (n%x==0);
printf ("%d\n", n);

Heh, zaskoczenie. Jak dałem tak pod while, to mi wyświetla wszystkie liczby z przedziału, zamiast tylko te podzielne. Co tu namieszałem? :)

dodanie znacznika <code class="c"> - @furious programming

0

if nie ma żadnej instrukcji, w sumie można całkiem tę linię usunąć. printf printuje.

Równoważny kod:

if(n%x==0){}

printf("%d\n", n);

Czyli jednak miałem rację. Nie rozumiesz ;)

0

Oj dobra, nie dałem klamerki do ifa i od razu nie rozumiem :D Wcześniej tak ładnie wytłumaczyłem :P

if (n%x==0){
printf ("%d\n", n);}

tak jest dobrze już.

dodanie znacznika <code class="c"> - @furious programming

2

nie ma sensu używać tutaj modulo - modulo korzysta z dzielenia a dzielenie to jedna z najbardziej kosztownych operacji
można tu po prostu skorzystać z dodawania

wystarczy znaleźć najniższą liczbę z przedziału n..m podzielną przez x a potem dodawać do niej x do momentu aż x > m

0
#include <stdio.h>
 
int main()
  {
    unsigned n,m,x;
    scanf("%u%u%u",&n,&m,&x);
    for(n=x*((n+x-1)/x);n<=m;n+=x) printf("%d\n",n);
    return 0;
  }
0

@_13th_Dragon Ten program nie działa poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1