Algorithmus in Java implementieren

Havoc

Moderator
Joined
Jul 19, 2008
Messages
17,224
Points
390
Lieblings C&C



Habe hier als Aufgabe gegeben:
Es sollen drei ganze Zahlen eingegeben und verarbeitet werden. Die Summe, das Produkt, das arithmetische Mittel und die Reihenfolge der Zahlen, sortiert nach der Größenordnung sind auszugeben.
Wobei hier schon die erste Frage ist: ist "sortiert nach der Größenordnung" so gemeint, dass die Reihenfolge der 3 Zahlen gemeint ist, oder die Reihenfolge der Summe, des Produktes und des Mittelwerts.


Dafür soll ich jetzt ein Struktogramm anfertigen, was ich schon gemacht hab. Danach dann den Algorithmus in Java implementieren.
Bin nur leicht eingerostet in Java und bekomm das garnichtmehr hin.


Könnt ihr mir helfen?
 
Die Größenordnung bezeichnet normalerweise den Exponenten. Also z.b. 1x10^7 ist ne Größenordnung mehr als 1x10^6. In dem Fall reicht´s aber dann einfach sie nach der Größe zu sortieren, da das auf´s Gleiche rausläuft.
Ich denke das mit der Größenordnung bezieht sich auch nur auf die Reihenfolge.

Kann dir sonst aber auch nur den Kot sagen, von Java hab ich keine Ahnung. :angel
 
also ich hab dir mal die Berechnung inna Main mal runterprogrammiert... is jetzt zwar nicht schön, aber soll ja nur als Einstieg dienen mit Consoleneingabe... oder sollst du es mit Swing machen ?

ps. die Formatierung geht irgendwie flöten aber sollte auch so verständlich sein^^


public static void main(String args[]) {
//Scanner anlegen
Scanner sc = new Scanner(System.in);
ArrayList<Integer> zahlen=new ArrayList<Integer>();

//Zahlen einlesen
System.out.println("Geben sie nun Zahl1 ein:");
zahlen.add(sc.nextInt());
System.out.println("Geben sie nun Zahl2 ein:");
zahlen.add(sc.nextInt());
System.out.println("Geben sie nun Zahl3 ein:");
zahlen.add(sc.nextInt());
System.out.println("-----------");

//Sortieren
Collections.sort(zahlen);


//Berechnungen
int summe=0;
int produkt=1;
int mitte=0;
System.out.print("Zahlen: ");
for(int i=0;i<zahlen.size();i++){
System.out.print(" " +zahlen.get(i));
summe=summe+zahlen.get(i);
produkt=produkt*zahlen.get(i);
}
mitte=summe/zahlen.size();

System.out.println();
System.out.println("Produkt:"+ produkt+"Summe: "+summe+" Mitte:"+mitte);
}

Console:

Geben sie nun Zahl1 ein:
10
Geben sie nun Zahl2 ein:
0
Geben sie nun Zahl3 ein:
5
-----------
Zahlen: 0 5 10
Produkt:0Summe: 15 Mitte:5
 
Last edited:
Oha, so lang hatte ich mir den Algorithmus garnicht vorgestellt.

Danke dafür
 
Muss den Thread hier nochmal ausgraben.
Als neue Aufgabe habe ich, einen Rekursiven Algorithmus für eine binäre Suche zu verwenden.
Ich bin aber echt zu blöd, um den einzubauen.
Könnt mir denn mal jemand helfen? :)
 
c++

So? Nicht getestet.

int search(BYTE* binary, BYTE& find, int max, int pos=0)
{
if(pos<max && binary[pos]!=find)
{
return search(binary, find, max, pos++);
}
else
{
return pos;
}
}

int _main()
{
const int size = 1000;
BYTE* binary = new BYTE[size];
// hau ins binary irgendwas rein

BYTE find = 0xFF;
int found = search(binary, find, size);
delete[] binary;

if(found!=0)
printf("Da ist es: %i", found);
else
printf("nicht gefunden");

return 0;
}
 
Last edited:
Achja, ich meine natürlich Java!
 
ja syntax kannste ja selber transformen. das wird so ähnlich in java machbar sein. Wichtig is nur die Logik. Die haste ja nun.
 
Code:
import java.util.Scanner;

public class BinaerSuche {
	public static void main(String[] args){
		
		char[] cluster = new char[26];
		for(int i = 0; i < cluster.length; i++){
			cluster[i] = (char) (i + 97);
		}
		System.out.println("Buchstaben : "+ArrayHelper.toString(cluster));
		System.out.println();
		System.out.println("Bitte geben Sie den zusuchenden Buchstaben ein : ");
		Scanner sc = new Scanner(System.in);
		char search = sc.next().charAt(0);
		
		int helper = binarySearch(cluster, search);
		if(helper > 0){System.out.println("Das gesuchte Objekt befindet sich an der Stelle " + helper);}
		else{System.out.println("Das gesuchte Objekt wurde nicht gefunden.");}
	}
	
	public static int binarySearch(char[] cluster, char search){
		boolean searchSuccesful = false;
		int start = 0;
		int end = cluster.length;
		int help = 0;
		int middle = 0;
		  
		while(searchSuccesful == false && help < cluster.length){
			middle = (start + end) / 2;
			if(cluster[middle] == search){
				searchSuccesful = true;
			}else{
				if((int)search < (int)cluster[middle]){
					end = middle - 1;
				}else{
					start = middle + 1;
				}
			}
			help++;
		}
		if(searchSuccesful == true){
			help = middle;
		}else{help = -1;}
		return help;
	}
}


Nen Danke wäre nett, falls du was nicht verstehst frag ^^
 
Hast du da gleich eine Art Benutzeroberfläche gemacht? :o
Oder warum gibt der da "System out..... (bitte geben sie zu suchende Zahl ein:) aus?
 
Hast du da gleich eine Art Benutzeroberfläche gemacht? :o
Oder warum gibt der da "System out..... (bitte geben sie zu suchende Zahl ein:) aus?
 
Du meinst den Buchstaben ? War nur als Beispiel gedacht, dass er nen Array binär durchsucht in dem das Alphabet steht :)

cluster = (char) (i + 97)
is der Ascii Code für die Buchstaben
 
das was cloud strife gemacht hat ist aber ein iterativer algorithmus und kein rekursiver. du wolltest doch nen rekursiven oder ist das egal?
upps sry das hatte ich überlesen, dann vergiss meinen code ^^ und um die rekursion zu verstehen, musst du erst die ekursion verstehen ^^
 
Der Havok is aber schon faul. Kriegt hier Lösungsansätze on mass aber weiß trotzdem nicht weiter :P
 
Vielleicht ist er so schlau und kopiert es 1 zu 1 dann kann ihm der Lehrer gleich ne 6 geben :P
 
Vielleicht ist er so schlau und kopiert es 1 zu 1 dann kann ihm der Lehrer gleich ne 6 geben :P
speziell in der softwareentwicklung bietet es sich nicht an, das rad ständig neu zu erfinden.

aber zum erlernen ist es natürlich schon wichtig auch selbst was zu basteln. und das muss er ja damit auch tun, denn soweit ich es verstanden habe, muss er den algorithmus in sein obiges progrämmchen einbauen.
 
Richtig, ich hab schon n Programm, in das ich den Algorithmus einbauen muss.
Und in dem Fall bin ich nicht zu faul, sondern einfach nur zu blöd. Ich kapier das nämlich einfach nicht, warum ich einen rekursiven Algorithmus machen sollte, wenns doch auch reicht, dass sich ne Methode einfach wiederholt.
Wenns auch nur ein if ist.

das was cloud strife gemacht hat ist aber ein iterativer algorithmus und kein rekursiver. du wolltest doch nen rekursiven oder ist das egal?

edit: für einen rekursiven algo schau mal hier:
http://leepoint.net/notes-java/algorithms/searching/rbinarysearch.html

Danke dafür :)

Edit, moment mal, in dem Fall ist das doch wirklich nur ein billiges if, wie ich oben schon geschrieben hab.
 
Ich kapier das nämlich einfach nicht, warum ich einen rekursiven Algorithmus machen sollte, wenns doch auch reicht, dass sich ne Methode einfach wiederholt.
ihr sollt vermutlich binary search benutzen weil es in der Aufgabe um eine geordnete Menge geht, dort hast du den vorteil dass du statt iterativer suche die wesentlich effizientere binaere Suche benutzen kannst.
vergleich mal die performance der worst/bestcase faelle fuer iterative (O(n)) und binaere suche(O(log n))
 
Back
Top Bottom