Gyakorlati alapok

Bekért szám osztói

 

Az egyik, a Számok oszthatósága című fejezet már bevezette az oszthatóság vizsgálatának egyik lehetséges programozás-technikai megoldását:

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

a kulcsalgoritmus a maradékképzést (%) hívja segítségül, hiszen ha x szám y számmal való osztásakor a maradék 0, akkor x szám osztható y számmal.

 

if(x % y == 0)

 

Ebben a fejezetben egy bekért szám oszthatóságát, még pontosabban osztóit listázzuk ki, sőt +1 feladatként meg is számoljuk azokat, ha esetleg gyermekünk spontán rákérdezne arra a trivialitásra, miszerint "Apa, n számnak hány lehetséges osztója van, ha beleértem önmagát és az 1-et is?"

 

Egyúttal a bekérést ellenőrizzük is: nem engedjük meg a felhasználónak, hogy ne pozitív számot adjon meg (while (szam <= 0)).

 

A probléma megoldásához importálnunk kell a bekérésért felelős előre gyártott függvényeinket (import java.util.Scanner;), majd a kötelező kasztolási rutin után (nextLine() és parseInt()) nyakánál fogva meg kell ragadnunk klasszikus for ciklusunkat és gátlástalanul iterálnunk őt azt éppen a keresett számig (int i = 1; i <= szam; i++). Az utóbbi lesz az osztandó (szam), a ciklusléptető pedig az osztó (i). A kulcsfontosságú feltétel a fentiek alapján: if (szam % i == 0). Az alábbi megoldás még nem tartalmazza az osztók számlálóját:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
    Scanner in = new Scanner (System.in);
    System.out.println ("Kérem adja meg a számot!");
    String bekeres = in.nextLine();
    int szam = Integer.parseInt(bekeres);
    while (szam <= 0){
        System.out.println("Kérem, hogy csak pozitív egész számot adjon meg!");
        bekeres = in.nextLine();
        szam = Integer.parseInt(bekeres);
    }
    for (int i = 1; i <= szam; i++){
        if (szam % i == 0){
            System.out.print(i + " ");
            }
        }
    }
}

 

Végeredmény (például):

Kérem adja meg a számot!
0
Kérem, hogy csak pozitív egész számot adjon meg!
10
1 2 5 10

 

Most pedig gyermekünk égi kíváncsiságának kielégítésére építsük be végre az osztók számlálóját. Ez nem lesz oly nehéz: a feltétel alá kell egy léptető jellegű számlálót tenni (szamlalo++) és a ciklus végén az eredményt kiírni. A számláló értéke természetesen tartalmazza magát a keresett számot és az 1-et:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

    int szamlalo = 0;
    Scanner in = new Scanner (System.in);
    System.out.println ("Kérem adja meg a számot!");
    String bekeres = in.nextLine();
    int szam = Integer.parseInt(bekeres);
    while (szam <= 0){
        System.out.println("Kérem, hogy csak pozitív egész számot adjon meg!");
        bekeres = in.nextLine();
        szam = Integer.parseInt(bekeres);
    }
    for (int i = 1; i <= szam; i++){
        if (szam % i == 0){
            System.out.print(i + " ");

            szamlalo++;
            }
        }

    System.out.print("\nA keresett számnak " + szamlalo + " osztója van.");
    }
}

 

Végeredmény (például):

Kérem adja meg a számot!
30
1 2 3 5 6 10 15 30
A keresett számnak 8 osztója van.

 

Ha azt akarjuk, hogy a számláló értéke ne tartalmazza magát a keresett számot és az 1-et, akkor a feltételmegadást kell szigorítanunk:

 

if(szam % i == 0 && i != 1 && i != szam)

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

    int szamlalo = 0;
    Scanner in = new Scanner (System.in);
    System.out.println ("Kérem adja meg a számot!");
    String bekeres = in.nextLine();
    int szam = Integer.parseInt(bekeres);
    while (szam <= 0){
        System.out.println("Kérem, hogy csak pozitív egész számot adjon meg!");
        bekeres = in.nextLine();
        szam = Integer.parseInt(bekeres);
    }
    for (int i = 1; i <= szam; i++){
        if (szam % i == 0 && i != 1 && i != szam){
            System.out.print(i + " ");

            szamlalo++;
            }
        }

    System.out.print("\nA keresett számnak " + szamlalo + " osztója van.");
    }
}

 

Végeredmény (például):

Kérem adja meg a számot!
30
2 3 5 6 10 15
A keresett számnak 6 osztója van.