Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
faecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:start [02.07.2020 09:52] – [A2] sbel | faecher:informatik:oberstufe:algorithmen:binaere_suche:binsuchprogramm:start [04.10.2021 17:04] (aktuell) – [Ein Programm zum Zahlenraten] sbel | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Ein Programm | + | ====== Ein Programm |
- | Arbeite mit dem folgenden | + | Arbeite mit dem folgenden |
- | <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; | ||
- | { | ||
- | if ( i>0 ) { | ||
- | indexvorher = i -1; | ||
- | } | ||
- | daten[i] = getZufallszahlOrdered(daten[indexvorher], | ||
- | } | ||
- | } | ||
- | |||
- | | ||
- | public int binaereSuche(int zahl) { | ||
- | + | ===== Aufgaben: ===== | |
- | } | + | |
+ | ==== A1 ==== | ||
+ | |||
+ | * Beschreibe die Funktion der privaten Methode '' | ||
+ | * Implementiere die Methode '' | ||
+ | ==== A2 ==== | ||
+ | Implementiere eine Methode '' | ||
+ | === (1) Programmablaufplan === | ||
- | public void anzeigen() { | + | Erstelle ein Flussdiagramm anhand der folgenden Beschreibung. |
- | for (int i=0; i< anzahl; i++) { | + | |
- | | + | |
- | } | + | |
- | } | + | |
- | + | ||
- | private int getZufallszahlOrdered(int basis, int grenze) | + | |
- | { | + | |
- | return (int)(2*(grenze-basis)/ | + | |
- | } | + | |
- | + | ||
- | } | + | |
+ | <code java> | ||
+ | public int binaereSuche(int needle) | ||
+ | </ | ||
- | /* App Klasse. Steuerklasse für unser Programm | + | |
- | public class App { | + | |
- | + | ||
- | public static void main(String[] args) { | + | |
- | BinarySearch liste = new BinarySearch(1000); | + | |
- | liste.anzeigen(); | + | |
+ | {{ : | ||
- | } | + | * 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)/ | ||
+ | </ | ||
+ | |||
+ | * Ist der Wert des Arrayelements **gleich** dem gesuchten Wert, wird der Indexwert mit '' | ||
+ | * Wenn der gesuchte Wert **kleiner** ist als der Inhalt von '' | ||
+ | <code java> | ||
+ | if ( gesucht < daten[mitte]) { | ||
+ | oben = mitte-1; | ||
} | } | ||
- | |||
</ | </ | ||
- | ===== Aufgaben: ===== | + | {{ :faecher: |
- | ==== A1 ==== | ||
- | |||
- | Probiere das Programm aus. Beschreibe, was es macht, verändere auch den Parameter '' | ||
- | ==== A2 ==== | + | * Sollte der gesuchte Wert **größer** sein als '' |
- | | + | |
<code java> | <code java> | ||
- | int gesucht=22; | + | if ( gesucht |
- | int treffer = liste.binaereSuche(gesucht); | + | unten = mitte+1; |
- | | + | } |
</ | </ | ||
- | * Die Methode | + | * Das ganze muss wiederholt werden, solange der Suchbereich |
- | * 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. | + | |
- | {{ : | + | === (2) Implementation === |
- | * Jetzt musst du den Index des mittleren Elements finden, | + | Implementiere die Methode wie entworfen |
+ | === Hilfestellungen === | ||
+ | |||
+ | |||
+ | ++++ Möglicher PAP | | ||
+ | {{ : | ||
+ | ++++ | ||
+ | |||
+ | ++++ Mögliches Methodengerüst | | ||
<code java> | <code java> | ||
- | | + | public int binarySearch(int needle) { |
+ | int minindex | ||
+ | int maxindex | ||
+ | int middleindex | ||
+ | int middlevalue | ||
+ | |||
+ | while ( ) { | ||
+ | |||
+ | if ( ) { | ||
+ | return middleindex; | ||
+ | } | ||
+ | |||
+ | |||
+ | if ( ) { | ||
+ | | ||
+ | } else { | ||
+ | | ||
+ | } | ||
+ | |||
+ | middleindex = | ||
+ | middlevalue = | ||
+ | |||
+ | } | ||
+ | |||
+ | return | ||
+ | } | ||
</ | </ | ||
+ | ++++ |