Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Der faule Lehrer (Schleifen)

Herr Lehrer Stressli ist Mathematiker und daher eher faul. In einem Mathebuch für seine Klasse hat er folgende Aufgabe gefunden:

  «Löse die folgenden drei Aufgaben und erfinde 3 weitere im selben Stil:
    364 * 2475 = ???
    308 * 2925 = ???
    165 * 5460 = ??? »

Selbst hat der faule Stressli die Aufgabe natürlich nicht gelöst. Nun kommen aber Schüler mit weiteren Aufgaben im selben Stil und er soll deren Lösungen bewerten!
Doch was ist 'der selbe Stil'? Im Lösungsbuch steht, dass das Produkt der beiden ganzzahligen Faktoren immer 900900 ergeben muss. Aha!
Natürlich könnte Herr Stressli dies nun immer nachrechnen. Doch er bevorzugt eine Liste mit allen möglichen Produkten aus zwei Faktoren, welche 900900 ergeben:
 900900 = 1 * 900900
        = 2 * 450450
        = 3 * 300300
        = 4 * 225225
        = 5 * ...
Mit dieser Liste muss er nicht mal seinen Taschenrechner bemühen!

Helfen Sie Herrn Stressli mit einem Programm, das alle möglichen Multiplikationen (aus zwei Faktoren) sortiert ausgibt, welche als Produkt 900900 ergeben. Der erste der beiden Faktoren soll immer kleiner als der zweite sein. Die Sortierung ist aufsteigend nach dem ersten Faktor. Somit kann unser faule Lehrer einfach in der Liste nachschlagen, ob seine Schüler eine sinnvolle Lösung erstellt haben.

Sie tun damit Herrn Stressli einen doppelten Gefallen: Er war sogar zu faul, dieses Programm selbst zu schreiben!

1 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (1)

virgil 30. November 2015 23:23   reply report
@ Py Thon: Dein Code berücksichtigt nicht die Regel, dass der Operator kleiner als der Operand sein muss, oder?

36 Lösung(en)

class Main
{
	private void calc(long[] i_Multi)
	{
		
		for(;i_Multi[1] > 948;i_Multi[1]--)
		{
			for(i_Multi[0] = 1;i_Multi[0] < i_Multi[1];i_Multi[0]++)
			{
				if(i_Multi[0] * i_Multi[1] > 900900)
				{
					i_Multi[0] = i_Multi[1];
				}
				else if(i_Multi[0] * i_Multi[1] == 900900)
				{
					System.out.printf("%d x %d = %d%n",i_Multi[0], i_Multi[1], i_Multi[0] * i_Multi[1]);
				}
			}
		}	
	}
	
	public static void main(String[] args)
	{
		long[] i_Array = new long[2];
		i_Array[0] = 1;
		i_Array[1] = 900900;
		
		Main main =new Main();
		main.calc(i_Array);
	}
}
                

Lösung von: Andy Großhennig (Bundeswehr)

// ich bin auch faul.
document.write("900900 <br>");
for (var x = 1; x < Math.sqrt(900900); x++)
   if (Math.floor(900900/x) == 900900/x)
      document.write("= " + x + " × " + 900900/x + "<br>"); // lissalanda@gmx.at
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

for i in range(1, 900900):
	if 900900%i == 0:
		print(int(900900/i), "*" , i)
                

Lösung von: Py Thon ()

from math import *
erg = 900900
list = []
for x in range(int(sqrt(erg))):
	y = erg/(x+1)
	if (x+1)*y == erg:
		list.append(str(x)+"*"+str(y))
	x += 1
                

Lösung von: Kor Py ()

package ch.programmieraufgaben.iteration.stressli;


/**
 * Programmieraufgabe "Der faule Lehrer" www.programmieraufgaben.ch"
 * @version 0.1 (Dec 8, 2015)
 * @author Philipp Gressly Freimann 
 *         (philipp.gressly@santis.ch)
 */
public class Stressli {

	public static void main(String[] args) {
		new Stressli().top();
	}


	void top() {
		int wurzel = (int) (Math.sqrt(900900));
		int i = 1;
		while(i < wurzel) {
			if(moeglich(i)) {
				ausgabe(i);
			}
			i = i + 1;
		}
	}


	boolean moeglich(int i) {
		return 0 == 900900 % i;
	}


	void ausgabe(int i) {
		System.out.println("900900 = " + i + " * " + 900900/i);
	}

}  // end of class Stressli
                

Lösung von: Philipp Gressly Freimann (SANTIS Training AG)

Integer zweiterFaktor = 900900

(1..zweiterFaktor).each { Integer ersterFaktor ->
    if (ganzZahligTeilbar(ersterFaktor, zweiterFaktor)) {
        Integer neuerZweiterFaktor = berechneNeuenZweitenFaktor(ersterFaktor, zweiterFaktor)
        if (ersterFaktorKleinerZweiterFaktor(ersterFaktor, neuerZweiterFaktor)) {
            println "${ersterFaktor} * ${neuerZweiterFaktor} = ${ersterFaktor * neuerZweiterFaktor}"
        }
    }
}

boolean ganzZahligTeilbar(Integer ersterFaktor, Integer zweiterFaktor) {
    return zweiterFaktor % ersterFaktor == 0
}

boolean ersterFaktorKleinerZweiterFaktor(Integer ersterFaktor, Integer zweiterFaktor) {
    return ersterFaktor < zweiterFaktor
}

Integer berechneNeuenZweitenFaktor(Integer ersterFaktor, Integer zweiterFaktor) {
    return zweiterFaktor / ersterFaktor
}
                

Lösung von: Max Jando (Hochschule Mannheim)

#include <stdio.h>
/*
 * Autor: Hade Mohamed | HTL Bulme
 * Contact: proxfreak@gmail.com
 */

int main()
{
	int divisor = 1;
	while(divisor < 900900)
	{
		if(900900 % divisor == 0) printf("%i * %i = %i\n", divisor, (900900/divisor), divisor * (900900/divisor));
		divisor++;
	}
	while(true);
}
                

Lösung von: Hade Mohamed (HTL Österreich)

using System;

namespace FaulerLehrer {
  class Program {
    static void Main() {
      const int basis = 900900;
      double division = basis;
      for(int i = 1; i <= division; i++) {
        division = (double)basis / i;
        if(division % 1 == 0) {
          Console.WriteLine("{0} = {1} × {2}", basis, i, division);
        }
      }

      Console.ReadKey(true);
    }
  }
}

                

Lösung von: Marcel Kapma ()

#Der Faule Lehrer
ergebnis = 900900
x = 1
y = int(ergebnis / x)
while x < y:
    if x*y == ergebnis:
         print(x, "x", y, "=", ergebnis)
    x +=1
    y = int(ergebnis / x)

                

Lösung von: Stefan Schaberg ()

#include <stdio.h>

int main() 
{
	int target = 900900;
	int fNumber = 1;
	int sNumber = 1;

	FILE *fp;
	errno_t err;

	err = fopen_s(&fp,"C:\\Users\\olivier.lischer\\OneDrive\\C\\derFauleLehrer\\Debug\\output.txt","w+");

	if (err != 0)
	{
		printf("Es ist ein fehler aufgetreten\n");
		return 1;
	}
	
	do 
	{
		if (target % fNumber == 0)
		{

			sNumber = target / fNumber;

			if (fNumber < sNumber)
				fprintf(fp, "%d = %d * %d\n", target, fNumber, sNumber);
			else
				break;
		}

		fNumber++;
	} while (1);

	fclose(fp);

	return 0;
}
                

Lösung von: Name nicht veröffentlicht

import java.util.ArrayList;
import java.util.List;

public class FauleLehrer {

	public static List<String> faulheit(int n){
		
		
		
		List<String> list = new ArrayList<String>();
		
		
		for (int i = 1; i <= n ; i++){
			int x = i;
			
			int y = n/x;
			
			if(x < y && x * y == n)
			{
				list.add(x + "*" + y + " = " + n);
			}  
			
			
			
		}
		return list;
		
	}
	
	
	
	
	public static void main (String[] args){

	List<String> list = FauleLehrer.faulheit(900900);// Zahl n eingeben für Welchen Wert man die Funktion benutzen will
		for (long x = 0; x < list.size() ; x++){
		System.out.println(list.get(x));
        
	}
}
}
                

Lösung von: Name nicht veröffentlicht

#include <iostream>
using namespace std;

void faul(int zahl) {
    int divisor = 1;
    while (divisor < sqrt(zahl) ) {
        if ( (zahl%divisor) == 0 ) {
            cout << divisor << " mal " <<zahl/divisor <<  " = " << zahl << endl;
            divisor++;
        }
        else divisor++;
    }
}

int main(int argc, const char * argv[]) {
    faul(900900);
    return 0;
}
                

Lösung von: Farid Bonakdar (TU Darmstadt)

public class Program {

	public static void main(String[] args) {
		int resultat = 900900;
		int operand1 = 1;
		double operand2 = 900900;
		for(operand1 = 1;operand1 < operand2; operand1++){
			operand2 = resultat / operand1;
			
			int prüfung = (int) operand2;

			if ((operand2 - prüfung) != 0.0){
			
			}
			else{
			if(resultat == operand1 * operand2)
			{
			System.out.print(resultat);
			System.out.print(" = ");
			System.out.print(operand1);
			System.out.print(" * ");
			System.out.println(prüfung);
			}
			else{
			}
			}
		}
	}
}
                

Lösung von: Loris Leuenberger (BiCT AG)


public class LazyTeach {

	public static void main(String[] args) {
		LazyTeach LT = new LazyTeach();
		LT.go();
	}
	
	public void go(){
		int a = 900900;
		int c = 0;
		
		for(int i=1; i < (a/2); i++){
			if((a % i)==0){
				c = a / i;
					if(c >= i){
					System.out.println("900900 = " + i + " * " + c);
					}			
			}			
		}		
	}
}
                

Lösung von: Philipp Vulpius (Steinbeis-Hochschule)

def showList(a,b)
  while a < b/a 
    if (b%a) == 0
       puts "#{b} = #{a}  * #{b/a}"
    end·
    a+=1
  end 
end

showList(1,900900)

                

Lösung von: marco unbekannt (Berufskolleg)

public class der_faule_Lehrer{
	
        public static void main (String [] Args) {
		ProduktImmerGleich(900900);
	}
	
	public static void ProduktImmerGleich (int Produkt) {
		for (int i = 1; i < Produkt / i; i++) {
			if (Produkt%i==0) {
				System.out.println
				(Produkt+ " = " + i + " * " + Produkt/i);
			}
		}
	}
}

                

Lösung von: Thomas Anderson (Freie Universität Berlin)

public class Main {
    public static void main(String[] args) {
        for (int a = 900900; (900900 / a) != a; a--) {
            if ((900900 % a) == 0) {
                System.out.println((900900 / a) + " " + a);
            }
        }
    }
}
                

Lösung von: Joel Duscha (Alexander-von-Humboldt-Gymnasium)

/**
 * 2016-02-29
 * @author Sam Yiming Miao
 */

package ch.toastgott.programmieraufgaben;

public class GemeinsamesProdukt {
	public static void main(String[] args) {
		int figure = 900900
		for (int factor1 = 1; factor1 <= figure; factor1++) {
			if (figure%factor1 == 0) {
				int factor2 = figure / factor1;
				System.out.println(factor1 + " * " + factor2 + " = " + figure);
			}
		}
	}
}
                

Lösung von: Sam Yiming Miao (Schule ist gut genug)

public class faulerLehrer {

	public static void main(String[] args) {
		
		int a = 1;
		int b = 900900;
		int c = 900900;
		
		while(a<b) {
			
			if(c%a == 0) {
			
				b = c/a;
				
				System.out.print(a);
				System.out.print(" * ");
				System.out.println(b);
				
			} 
			
			a++;
		}

                

Lösung von: Al Ex (Wirt)

var maximum = 900900;
Array.apply(1, Array(maximum)).map(function (_, i) {
  if(maximum % i == 0) {
    if (i < parseInt(maximum/i)) {
      console.log(maximum + ' = ' + i + ' * ' + parseInt(maximum/i));
    }
  }
});
                

Lösung von: Fabian Dennler (fabforge)

static void FaulerLehrer()
        {
            int n = 20; //n * produkt(x) = 900900
            int endprodukt = 900900;

            for (int i = 1; i <= n; i++)
            {
                int faktor;
                faktor = endprodukt / i;
                Console.Write("Case " + i + ": " + faktor + "\n");
            }

            Console.Write("\n");
            Console.ReadKey();
        }
                

Lösung von: Name nicht veröffentlicht

                        var a = 1;
			var b;
			var c = 900900;

			do {
				if(c % a == 0) {
					b = c/a;
					document.write(c + " = " + a + " * " + b + "<br />");
				} 

				a++;
			}
			while (a < b)
                

Lösung von: Tanja :) (Georg-Simon-Ohm Berufskolleg)

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    int d = 0, i = 1;
    for(i = 1;i<(900900 / i);i++){
        d = 900900 / i;
        if(i * d == 900900){
            printf("900900 = %d * %d \n",i,d);
        }
            
    }
    system("PAUSE");
    return (EXIT_SUCCESS);
}
                

Lösung von: Robin Walter ()

$faktor1 = 1;
$erg = 900900;
$faktor2 = $erg / $faktor1;

print("900900 ");

while ($faktor1<$faktor2) {
	$faktor2 = $erg / $faktor1;
	print ("= $faktor1 * $faktor2\n");
	$faktor1++;
} 
                

Lösung von: Markus Dick (Technische Hochschule Ingolstadt)

#include <iostream>

using namespace std;

int main()
{

    const int zahl=900900;
    int erg=2;

    for(int i=1;i<erg;i++)
    {
        erg=zahl/i;

        if(i<erg)
        {
            cout<<i<<"*"<<erg<<"="<<zahl<<endl;
        }
    }


    return 0;
}
                

Lösung von: Name nicht veröffentlicht

Module Module1
    Sub Main()
        For i As Integer = 1 To 900900 Step 1
            If 900900 Mod i = 0 Then
                If i < 900900 / i Then
                    Console.WriteLine("900900 = " & i & " * " & 900900 / i)
                End If

            End If
        Next

        Console.ReadLine()
    End Sub
End Module
                

Lösung von: Elias Zech (Optics Balzers)

$x = 1;
$y = 900900;

while ($x < $y)
{
    echo "900900 = " . $x . " * " . $y;
    $x= $x + 1;
    $y= $y - ($y*(1/$x));
    echo "<br>";
}
                

Lösung von: Maik Scheiermann (Powercloud GmbH)


TYPES: BEGIN OF tab_lehrer,
  produkt1 TYPE i,
  produkt2 TYPE i,
  END OF tab_lehrer.

DATA: lt_tabelle TYPE tab_lehrer,
      lt_rechnungen LIKE STANDARD TABLE OF lt_tabelle WITH HEADER LINE,
      ls_rechnungen LIKE LINE OF lt_rechnungen,
      lv_ergebnis TYPE i.

" Solange Produkt 1 kleiner als Produkt 2 ist.
WHILE lt_rechnungen-produkt1 <= lt_rechnungen-produkt2.
  " Produkt 1 wird um 1 erhöht.
  ADD 1 TO ls_rechnungen-produkt1.
  " Produkt 2 wird ausgerechnet.
  ls_rechnungen-produkt2 = 900900 / ls_rechnungen-produkt1.
  " Sobald Produkt 1 größer als Produkt 2 ist, wird die Schleife beendet. WICHTIG! Sonst Endlosschleife!
  IF ls_rechnungen-produkt1 > ls_rechnungen-produkt2.
    EXIT.
  ENDIF.
  " Überprüfung des Ergebnisses
  lv_ergebnis = ls_rechnungen-produkt1 * ls_rechnungen-produkt2.
  " Wenn die Rechnung richtig ist, wird die Rechnung in die Tabelle eingetragen.
  IF lv_ergebnis = 900900.
    APPEND ls_rechnungen TO lt_rechnungen.
  ENDIF.
ENDWHILE.

" Ausgabe der Tabelle im gewünschten Format.
LOOP AT lt_rechnungen INTO ls_rechnungen.

  WRITE: / '900900 = ',
           ls_rechnungen-produkt1,
           ' * ',
           ls_rechnungen-produkt2.
ENDLOOP.
                

Lösung von: Alexander S. (msg systems)

Liste=[' '.join((str(i),' * ',str(900900//i))) for i in range(1,900900) if 900900%i==0 and i<900900//i]
                

Lösung von: rob ert (tub)


public class starter {
	
	public static void main(String[] args) {
		
		int Zahl= 900900;
		
		for(int i = 1; (Zahl/i) !=i ;i++){
		
				if(Zahl%i==0){
					System.out.println(i+"\t X "+Zahl/i);
				}
		}
	}
}

                

Lösung von: Yannick .. (It-Handbook.net)

public class DerFauleLehrer {
	
	public static void main(String[] args) {
		for(int i = 1; i <= Math.round(Math.sqrt(900900D)); i++) {
			if(900900 % i == 0) {
				System.out.println("900900 = " + i + " * " + 900900 / i);
			}
		}
	}
}
                

Lösung von: Linus Götz (Lichtenberg-Gymnasium Cuxhaven)

public class Hauptklasse 
{
	public static void main(String[] args) 
	{
		double Faktor1 = 1;
		double Faktor2 = 1000000; //trololololol
        while (Faktor1 < Faktor2)
        {
        	Faktor2 = 900900 / Faktor1;
        	Faktor1 += 1;
        	System.out.println(Faktor1 + " * " +  Faktor2 + " = " +  900900);
        }
	}
}

                

Lösung von: Arnim Pankratz (Freiherr-vom-Stein-Gymnasium Betzdorf)

for (var x = 1; x <= 900900; x++) {
    if (900900 % x === 0) {
        var y = 900900 / x;
        if(x < y) {
        console.log(x + "*" + y);
        } else {}
    } else {}
}
                

Lösung von: Irene Strauß (Liceo Scientifico, Bruneck)

'31.5.2017 - Powerbasic 10

#COMPILE EXE
#DIM ALL

FUNCTION PBMAIN () AS LONG

DIM i AS LONG
DIM Resultat AS STRING

i = 1

WHILE i < 900900 / i
    IF 900900 MOD i = 0 THEN
        Resultat += "900900 = " & FORMAT$(i) & " * " & FORMAT$(900900 / i) & $CRLF
    END IF
    INCR i
LOOP

MSGBOX Resultat,, EXE.NAME$

END FUNCTION
                

Lösung von: Markus Sägesser (keine)

public class Produktliste
{	
	public static void main(String[] args)
	{
		final int ergebnis = 900900;
		
		for(int i = 1; i < ergebnis/i; i++)
		{
			if(ergebnis%i == 0)
			{
				System.out.println(i + " " + ergebnis/i);
			}
		}

	}

}
                

Lösung von: Name nicht veröffentlicht

for (var a = 1; a <= 900900; a++) {
if (900900 % a == 0 && a <= 900900 / a) { 
console.log(a + "*" + 900900/a)
}
else {
}}
                

Lösung von: Irene Strauß (Liceo Scientifico, Bruneck)

Verifikation/Checksumme:

900900 = 1 * 900900
900900 = 2 * 450450
900900 = 3 * 300300
900900 = 4 * 225225
900900 = 5 * 180180
900900 = 6 * 150150
900900 = 7 * 128700
900900 = 9 * 100100
900900 = 10 * 90090
900900 = 11 * 81900
900900 = 12 * 75075
900900 = 13 * 69300
900900 = 14 * 64350
900900 = 15 * 60060
900900 = 18 * 50050
900900 = 20 * 45045
900900 = 21 * 42900
900900 = 22 * 40950
900900 = 25 * 36036
900900 = 26 * 34650
900900 = 28 * 32175
900900 = 30 * 30030
900900 = 33 * 27300
900900 = 35 * 25740
900900 = 36 * 25025
900900 = 39 * 23100
900900 = 42 * 21450
900900 = 44 * 20475
900900 = 45 * 20020
900900 = 50 * 18018
900900 = 52 * 17325
900900 = 55 * 16380
900900 = 60 * 15015
900900 = 63 * 14300
900900 = 65 * 13860
900900 = 66 * 13650
900900 = 70 * 12870
900900 = 75 * 12012
900900 = 77 * 11700
900900 = 78 * 11550
900900 = 84 * 10725
900900 = 90 * 10010
900900 = 91 * 9900
900900 = 99 * 9100
900900 = 100 * 9009
900900 = 105 * 8580
900900 = 110 * 8190
900900 = 117 * 7700
900900 = 126 * 7150
900900 = 130 * 6930
900900 = 132 * 6825
900900 = 140 * 6435
900900 = 143 * 6300
900900 = 150 * 6006
900900 = 154 * 5850
900900 = 156 * 5775
900900 = 165 * 5460
900900 = 175 * 5148
900900 = 180 * 5005
900900 = 182 * 4950
900900 = 195 * 4620
900900 = 198 * 4550
900900 = 210 * 4290
900900 = 220 * 4095
900900 = 225 * 4004
900900 = 231 * 3900
900900 = 234 * 3850
900900 = 252 * 3575
900900 = 260 * 3465
900900 = 273 * 3300
900900 = 275 * 3276
900900 = 286 * 3150
900900 = 300 * 3003
900900 = 308 * 2925
900900 = 315 * 2860
900900 = 325 * 2772
900900 = 330 * 2730
900900 = 350 * 2574
900900 = 364 * 2475
900900 = 385 * 2340
900900 = 390 * 2310
900900 = 396 * 2275
900900 = 420 * 2145
900900 = 429 * 2100
900900 = 450 * 2002
900900 = 455 * 1980
900900 = 462 * 1950
900900 = 468 * 1925
900900 = 495 * 1820
900900 = 525 * 1716
900900 = 546 * 1650
900900 = 550 * 1638
900900 = 572 * 1575
900900 = 585 * 1540
900900 = 630 * 1430
900900 = 650 * 1386
900900 = 660 * 1365
900900 = 693 * 1300
900900 = 700 * 1287
900900 = 715 * 1260
900900 = 770 * 1170
900900 = 780 * 1155
900900 = 819 * 1100
900900 = 825 * 1092
900900 = 858 * 1050
900900 = 900 * 1001
900900 = 910 * 990
900900 = 924 * 975

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Mittel
Webcode: 5t2t-ux7e
Autor: Philipp Gressly Freimann (SANTIS Training AG)

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen