Pseudocode Zahlendarstellung < Algor.+Datenstr. < Theoretische Inform. < Hochschule < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 19:17 So 11.11.2012 | Autor: | imzadi |
Guten Tag,
Ich bin ein absoluter Neuling und brauche Hilfe bei der Erstellung eines Pseudocodes,und zwar:
Es geht um die Dezimaldarstellung einer natuerlichen Zahl. Ich muss ein Pseudocode schreiben,das mir die i-te Ziffer dieser Darstellung zuruelckgibt.
Ich verstehe das so ,,dass ich erstmal nach der Eingabe der Zahl ihre Dezimaldarstellung ( mit dem Division-mit-Rest Algorithmus) ausgeben lassen soll und dann mit i irgendwie die i-et Ziffer aufrufen,ist das irgendwie so?
Fuer jede Hilfestellung bin ich euch sehr dankbar.(java)
Ich habe diese Frage in keinem anderen Forum auf anderen Seiten gestellt
|
|
|
|
Hallo imzadi,
das wird hier normalerweise entweder rekursiv gehen oder mit einer gezählten Schleife. Es geht aber auch sozusagen "direkt". Der Rechenaufwand ist allerdings der gleiche.
> Es geht um die Dezimaldarstellung einer natuerlichen Zahl.
> Ich muss ein Pseudocode schreiben,das mir die i-te Ziffer
> dieser Darstellung zuruelckgibt.
> Ich verstehe das so ,,dass ich erstmal nach der Eingabe
> der Zahl ihre Dezimaldarstellung ( mit dem
> Division-mit-Rest Algorithmus) ausgeben lassen soll
Nein, das ist nicht Teil der Aufgabe. Vielleicht ist ja nur die i-te Ziffer interessant und man will die 281.944.317 weiteren Ziffern gar nicht berechnen. Schließlich wird die Zahl ja nicht dezimal, sondern im Normalfall binär vorliegen (auch wenn man der Übersichtlichkeit halber gern hexadezimal zusammenfasst).
> und
> dann mit i irgendwie die i-et Ziffer aufrufen,ist das
> irgendwie so?
Naja, Du hast halt eine (theoretisch beliebig große) Zahl vorliegen.
Die erste Frage ist, wie eigentlich die Ziffern gezählt werden. Das geschieht normalerweise "von hinten", also die Einerstelle zuerst, dann die Zehner, die Hunderter etc. Dabei ist praktikabel, die Einerstelle mit der Ordnungsziffer 0 zu belegen, die Zehner mit 1 etc. Das entspricht dann dem Exponenten der Stellenwertigkeit. Die "dritte" Ziffer wären dann die, die den Stellenwert [mm] 10^3 [/mm] wiedergibt, also die Tausender. Das ist ja eigentlich die vierte Stelle von hinten.
Manchmal gibt ein Aufgabensteller zu erkennen, welche Zählweise er haben möchte, z.B. von vorne an gezählt oder aber von hinten beginnend mit "1", dann muss man eben entsprechend umrechnen.
Hier nun zwei Möglichkeiten in "meiner" Zählung:
1) Du schreibst einen Algorithmus, der Dir die letzte Stelle (also Nr. "0") einer Dezimalzahl liefert. Das geht natürlich durch Teilung durch 10 und Feststellung des Restes. Den schneidest Du ab (subtrahierst), teilst alles übrige durch 10 und hast damit die ursprüngliche Zahl ihrer letzten Stelle beraubt.
Das tust Du nun i-mal (also für die Tausender, die "dritte" Stelle, dreimal); erst im nächsten Durchgang liefert Dein Algorithmus die gesuchte Zahl, nämlich als Rest bzw. eben im nächsten Durchgang abzuschneidende Stelle.
2) Das geht auch in einem einmaligen Durchlauf. Deinem Rechner ist ja egal, ob er durch $10$ oder durch [mm] 10^i [/mm] teilt. Allerdings musst Du, wie bei der schriftlichen Division, die jeweils aktuelle Ziffer des Quotienten "aufschreiben", also festhalten. Danach brauchst Du sie nicht mehr, denn das Ergebnis der Division ist ja unerheblich.
Du folgst also der Regel der schriftlichen Division solange, bis der Rest kleiner als [mm] 10^i [/mm] ist. Die dann gerade aktuelle Ziffer des Quotienten (also die zuletzt berechnete) ist dann die gesuchte.
> Fuer jede Hilfestellung bin ich euch sehr dankbar.(java)
Pseudocode sollst Du nehmen, weil die Struktur des Algorithmus unabhängig von seiner Implementierung in irgendeiner Sprache sein soll.
Das Prinzip funktioniert natürlich in jedem Stellenwertsystem. Zum Ausprobieren auf Papier ist es sogar besser, es einmal mit einem anderen System zu probieren, sagen wir im Siebenersystem.
Was ist denn die Stelle mit der Nummer 3 (also Stellenwert [mm] 7^3) [/mm] der Zahl 398.247 (dezimal)?
(Kontrolllösung: Dein Algorithmus sollte hier eine 6 auswerfen, da [mm] $398247_{10}=3246033_{7}$)
[/mm]
Grüße
reverend
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 23:39 So 11.11.2012 | Autor: | imzadi |
Super, vielen dank, muss mir noch darüber Gedanken machen... Kannst du vielleicht irgendeine Lektuere empfehlen, wo ich ueber so was nachlesen kann? Fühlt sich sehr ungewohnt an.... Vielleicht mit Beispielalgorithmen und wie man Pseudocode schreibt,vielen Dank.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:20 Mi 14.11.2012 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|