faecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:start [02.07.2020 09:50] – [A2] sbelfaecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:start [04.10.2021 17:04] (aktuell) – [Ein Programm zum Zahlenraten] sbel
Zeile 1: Zeile 1:
-====== Ein Programm zur binären Suche ======+====== Ein Programm zum Zahlenraten ======
  
  
-Arbeite mit dem folgenden Programmgerüst:+Arbeite mit dem folgenden BlueJ Projekt[[https://codeberg.org/qg-info-unterricht/bluej-binarysearch]]
  
-<code java App.java> 
-/** 
- * Erzeugt eine geordnete Zufallsreihe und ermöglicht Abfragen darüber. 
-  
- * @author Frank Schiebel 
- * @version 1.0 
- */ 
-class BinarySearch 
-{ 
-    private int[] daten; 
-    int anzahl; 
-     
-    public BinarySearch(int anzahl) 
-    { 
-        this.anzahl = anzahl; 
-        daten = new int[anzahl]; 
-        int indexvorher = 0; 
-        for (int i = 0; i < daten.length; i++) 
-        { 
-            if ( i>0 ) { 
-                indexvorher = i -1; 
-            } 
-            daten[i] = getZufallszahlOrdered(daten[indexvorher],10*anzahl); 
-        } 
-    } 
-    
-     
-    public int binaereSuche(int zahl) { 
  
-          +===== Aufgaben: =====
-    }+
  
 +==== A1 ====
 + 
 +  * Beschreibe die Funktion der privaten Methode ''initZahlenreihe''
 +  * Implementiere die Methode ''printZahlenreihe''
 +==== A2 ====
  
 +Implementiere eine Methode ''binaereSuche'', welche den Index des gesuchten Elements zurückgibt oder ''-1'', wenn der gesuchte Wert nicht gefunden wird. Folge dabei den Tipps und Aufgabenstellungen unten.
  
 +=== (1) Programmablaufplan ===
  
-    public void anzeigen() { +Erstelle ein Flussdiagramm anhand der folgenden Beschreibung
-        for (int i=0; i< anzahl; i++) { +
-             System.out.println( i + " -> " + daten[i] + " ");  +
-        } +
-    }     +
-    +
-    private int getZufallszahlOrdered(int basis, int grenze) +
-    { +
-        return (int)(2*(grenze-basis)/anzahl*Math.random()+1) + basis; +
-    } +
-     +
-}+
  
 +<code java>
 +  public int binaereSuche(int needle)
 +</code>
  
-/App KlasseSteuerklasse für unser Programm *+  Die Methode ''binaereSuche'' arbeitet auf dem zuvor erzeugten Array und nimmt als Argument die gesuchte Zahl entgegenDer Rückgabewert ist der Index des Arrayelements, in dem der gesuchte Wert steht - oder -1, wenn dieser nicht gefunden wurde. 
-public class App { +  Du führst Buch welcher Teil des Arrays zu durchsuchen ist und welcher Teil des Arrays nicht mehr in Frage kommt. wenn deine Methode startet, musst du das gesamte Array betrachten (kleinster Index ''0'', größter Index ''daten.length-1'')
-  +
-    public static void main(String[] args) { +
-        BinarySearch liste = new BinarySearch(1000); +
-        liste.anzeigen();+
  
 +{{ :faecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:step01.png |}}
  
-    } +  * Jetzt musst du den Index des mittleren Elements finden, und prüfen, ob der Inhalt größer, kleiner oder gleich dem gesuchten Wert ist.  
- + 
 + 
 +<code java> 
 +  int mitte = (oben+unten)/2; //Wenn oben+unten ungerade ist, wird ''mitte'' abgerundet   
 +</code> 
 + 
 +  * Ist der Wert des Arrayelements **gleich** dem gesuchten Wert, wird der Indexwert mit ''return'' zurückgegeben, denn das Element ist gefunden. 
 +  * Wenn der gesuchte Wert **kleiner** ist als der Inhalt von ''daten[mitte]'', kann die obere Hälfte des Arrays ausgeschlossen werden, indem man als neue obere Grenze ''mitte-1'' festlegt. 
 +<code java> 
 +if ( gesucht < daten[mitte]) { 
 +   oben = mitte-1; 
 } }
-  
 </code> </code>
  
-===== Aufgaben=====+{{ :faecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:step02.png |}}
  
-==== A1 ==== 
-  
-Probiere das Programm aus. Beschreibe, was es macht, verändere auch den Parameter ''anzahl'' bei der Erzeugung des BirarySearch Objekts. Welchen Einflüsse hat diese Änderung?  
  
-==== A2 ==== +  * Sollte der gesuchte Wert **größer** sein als ''daten[mitte]'' kann die untere Hälfte ausgeschlossen werdendazu muss der Wert von ''unten'' auf ''mitte+1'' gesetzt werden.
- Implementiere eine Methode ''binaereSuche'', welche den Index des gesuchten Elements zurückgibt oder ''-1'', wenn der gesuchte Wert nicht gefunden wird.+
  
 <code java> <code java>
-    int gesucht=22; +if ( gesucht > daten[mitte]{ 
-    int treffer = liste.binaereSuche(gesucht); +   unten = mitte+1 
-    System.out.println("Der Wert " gesucht + " befindet sich im Arrayelement mit dem Index " + treffer);+
 </code> </code>
  
-  * Die Methode ''binaereSuche'' arbeitet auf dem zuvor erzeugten Array und nimmt als Argument die gesuchte Zahl entgegen. +  * Das ganze muss wiederholt werden, solange der Suchbereich ''oben-unten'' noch mindestens ein Element umfasst.
-  * Du führst Buch welcher Teil des Arrays zu durchsuchen ist und welcher Teil des Arrays nicht mehr in Frage kommt. wenn deine Methode startet, musst du das gesamte Array betrachten.+
  
-{{ :faecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:step01.png |}}+=== (2) Implementation ===
  
 +Implementiere die Methode wie entworfen und teste sie.
 +
 +=== Hilfestellungen ===
 + 
 +
 +++++ Möglicher PAP | 
 +{{ :faecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:flowchart.png |}}
 +++++
 +
 +++++ Mögliches Methodengerüst |
 +<code java>
 +public int binarySearch(int needle) {
 +        int minindex 
 +        int maxindex 
 +        int middleindex 
 +        int middlevalue 
 +        
 +        while (  ) {
 +            
 +            if ( ) {
 +                return middleindex;
 +            }
 +            
 +           
 +            if ( ) {
 +               maxindex =   
 +            } else {
 +               minindex = 
 +            }
 +            
 +            middleindex =
 +            middlevalue = 
 +            
 +        }
 +        
 +        return -1;
 +    }
 +</code>
 +++++
  • faecher/informatik/oberstufe/algorithmen/binaere_suche/binsuchprogramm/start.1593683428.txt.gz
  • Zuletzt geändert: 02.07.2020 09:50
  • von sbel