Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Anzahl an Werte einlesen » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Seiten (2): [1] 2 nächste » Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Anzahl an Werte einlesen
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Informatikanfänger20
unregistriert
Anzahl an Werte einlesen Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,
es geht um folgende Aufgabe:

Schreiben Sie ein Programm in Java, welches zunächst die Anzahl der einzugebenden Werte einliest. Anschließend sollen die Werte(positiveGleitkommazahlen) nacheinander von der Konsole gelesen und in einem array gespeichert werden.
Nachdem das geometrische Mittel dieser Zahlen bestimmt wurde, soll sowohl dieses ,als auch der Inhalt des Arrays in umgekehrter Reihenfolge ausgegeben werden.
Wie mache ich das 1.
Die Anzahl der Werte einliest und dann in einem Array speichert. Das also die Arraylänge von der Eingabe abhängt?
11.11.2017 12:04
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	System.out.print("Anzahl der Werte: ");
	int n = sc.nextInt();
	System.out.print("Werte: ");
	double[] values = new double[n];
	for (int i = 0; i < n; i++) {
		values[i] = sc.nextDouble();
	}

	System.out.println("Die Eingabe war: " + Arrays.toString(values));
}


code:
1:
2:
3:
Anzahl der Werte: 5
Werte: 1,2 3 4,5 -6 7
Die Eingabe war: [1.2, 3.0, 4.5, -6.0, 7.0]


__________________
Syntax Highlighting fürs Board (Link)
11.11.2017 13:21 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Informatikanfänger20
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke smile Daumen hoch
D.h du liest eine Zahl n ein und mit einer for Schleife legst du dann ein array an an der 0. bis zur 4. Stelle. Warum muss man dann sageb dass die values im Array vom Typ double sein sollen. Das array ist doch als typ doublr erzeugt worden?
11.11.2017 13:37
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meinst du das values[i] = sc.nextDouble();?
Ich könnte auch versuchen, da einen String reinzupacken (würde aber nicht funktionieren).
Die rechte und linke Seite sind zunächst einmal unabhängig zu betrachten. Dann wird geschaut, ob sie auch den gleichen Typ haben (bzw. ein impliziter Cast erlaubt ist, man kann auch ein int in eine double Variable schreiben).

__________________
Syntax Highlighting fürs Board (Link)
11.11.2017 20:09 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Informatikanfänger20
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zitat:
Original von eulerscheZahl
Meinst du das values[i] = sc.nextDouble();?
Ich könnte auch versuchen, da einen String reinzupacken (würde aber nicht funktionieren).
.


Ja genau. Warum muss das eine Zahl nochmal in jedes Feld eingelesen werden. Es ist doch schon vom Typ double?
11.11.2017 21:40
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Wenn kein Wert zugewiesen wird, steht der Dafaultwert (=0) darin und keine Nutzereingabe.

__________________
Syntax Highlighting fürs Board (Link)
12.11.2017 12:38 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Informatikanfänger20
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Vielen Dank.

Jetzt stoße ich auf das Problem die werte im Array miteinander zu multiplizieren und die Wurzel zu bilden:

Die Wurzel wäre doch Math.sqrt(...); Aber wie multipliziere ich:
12.11.2017 20:09
Informatikanfänger20
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich habe es bis hierhin geschafft:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
import java.io.*; 
public class Sotierer3 {
 public static void main (String[] args) throws IOException{
 double speicher=0;
 double ergebnis =0;
 BufferedReader ein = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Anzahl der Werte eingeben:");
 int n = Integer.parseInt(ein. readLine()); 
System.out.print("Werte: "); 
double [] Werte = new double[n];
 for(int i=0; i<n; i++) {
 Werte[i]= Double.parseDouble(ein.readLine());
 }
 for(int i=0; i<n; i++) {
 speicher = Werte[i] *speicher;
 } ergebnis=Math.sqrt(speicher);
 System.out.println(ergebnis); 
}
 }


Irgendwas ist falsch: Es kommt immer 0,0 raus bei jeder Eingabe?
12.11.2017 23:07
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Erstens: es kommt deshalb immer 0 raus, weil Du "speicher" mit einer 0 initialisierst und dann nur andere Zahlen drauf multiplizierst. Aber eine 0 bleibt bei Multiplikation 0, immer...
Zweitens: wenn Du zu einer bestehende Zahl etwas dazu multiplizieren willst, dann schrieb doch besser
code:
1:
speicher *= Werte[i];

Drittens: meines Wissens ist das geometrische Mittel nicht die Quadratwurzel des Produkts sondern die n-te Wurzel der n Faktoren des Produkts. Wenn Du also 4 Zahlen eingelesen hast und diese auch zusammen multiplizierst, dann musst Du am Ende die 4-te Wurzel und nicht einfach die Quadratwurzel ziehen.

Gruß
Marco

PS: warum heißt die Klasse eigentlich "sotierer"? Wenn es um das Sortieren geht, dann fehlt ein r und außerdem hat diese Aufgabe ja nichts mit sortieren zu tun.
13.11.2017 00:41 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Informatikanfänger20
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke für deine Erläuterungen smile
Ja das stimmt. Es ist die n-te Wurzel. Wie mache ich das?

Speicher darf nicht 0 sein, soll ich es mit 1 initialsieren?
Ich werde die Klasse umbennen. Sotierer war einfach schon gespeichert großes Grinsen
13.11.2017 08:01
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So:

[latex]<br />
\sqrt[n]x = x^{\frac{1}{n}}<br />
[/latex]

Und herausfinden, wie man in Java Potenzen macht. Bitte nicht sowas machen:
code:
1:
x^(1/n) //Nicht! machen!


Besten Gruß,

Karlito
13.11.2017 08:14 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

So weit ich weiß geht das nur über die Funktion Math.pow(x, y). Die rechnet x-hoch-y aus. Die n-te Wurzel ist ja einfach x^(1/n). Allerdings hier Vorsicht: wenn Du nur 1/n schreibst und n ein int ist, macht er eine Ganzzahldivision und in diesem Fall würde dann immer 0 raus kommen. Du musst dann also 1.0/n schreiben.

Gruß
Marco

Edit: huch, da habe ich zu lange getippt. Karlito war ganze 10min schneller!
13.11.2017 08:24 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Informatikanfänger20
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Danke Daumen hoch

Das ist bis jetzt mein Ergebnis:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
import java.io.*;
 public class Sotierer3 {
 public static void main (String[] args) throws IOException{ 
double speicher=1;
 double ergebnis;
 BufferedReader ein = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Anzahl der Werte eingeben:");
 int n = Integer.parseInt(ein. readLine());
 System.out.print("Eingabe konkreter Werte: ");
 double [] Werte = new double[n]; 
for(int i=0; i<n; i++) {
 Werte[i]= Double.parseDouble(ein.readLine()); 
}
 for(int i=0; i<n; i++) {
 speicher *= Werte[i]; 
} 
ergebnis= Math.pow(speicher, 1.0/n);
 System.out.println("geometrisches Mittel: " + ergebnis); 

System.out.println("Array in umgekehrter Reihenfolge: ");
 for(int i=n-2; i>=1;i--) {
 for(int j=i+1; j>=0;j--) {
 if(Werte[i]<Werte[j]) { 
double ort= Werte[i];
 Werte[i]= Werte[j]; 
Werte[j]= ort; }
 }
 }
 for(int i=0; i<4;i++) {
 System.out.println(Werte[i]);
 } 
}
 }


Die Ausgabe der umgekehrten Reihenfolge funktioniert noch nicht. Wo ist da der Fehler?
13.11.2017 13:30
Informatikanfänger20
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich habe es hinbekommen. Danke für eure Hilfesmile Daumen hoch Daumen hoch
13.11.2017 15:54
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich verstehe den letzten Teil der Aufgabe aber nicht so, dass das Array in sich umgedreht werden soll, sondern nur dass die Ausgabe in umgekehrter Reihenfolge passieren soll. Das könntest Du auch einfach machen, indem Du in der for Schleife von n-1 runter nach 0 zählst und alle Elemente direkt ausgibst.
Ich weiß nicht, was genau Du noch korrigiert hast, aber in der letzten for-Schleife steht die Zahl 4 als Obergrenze. Muss das aber nicht passend zu n sein und nicht immer 4?
Außerdem stimmt das mit dem Reihenfolge umdrehen überhaupt nicht. Das ist ja fast eine Art sortieren oder so...

Gruß
Marco
14.11.2017 02:44 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Seiten (2): [1] 2 nächste » Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Algorithmen » Anzahl an Werte einlesen