Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

dringend hilfe bei pascal-(function)-aufgabe benötigt





Frage

hallo! also ich hab das problem, dass ich in einem pascal kurs ein prog schreibe muss, welches u.A. eine funktion fordert welche die anzahl der ziffern einer zahl bestimmt. also z.b.; zahl 1000 hat 4 ziffern. den rest den progs habsch schon, nur komm ich ni auf diese funtcion (zu simpel und bin ich zu blöd?!).. bitte helft mir schnell danke mfg alex

Antwort 1 von Edeltraud

Hallo,

wandle die Zahl in einen String und frage dann die Länge des Strings ab.

Eine Möglichkeit.

Gruss Edeltraud

Antwort 2 von Rangoo

Laut meiner Aufzeichnungen von vor hunderten von Jahren, gibt es die einfache Funktion length(Variable). Allerdings kann es sein, dass du den Integer dann zunächst zum string mutieren musst, da steht nämlich dabei, dass die Funktion zum Ermitteln der Länge von Strings ist.
Also: y:=length(str(x));
Du siehst, du bist einfach zu blöd. ;-)

So long

Antwort 3 von skaman

tag, danke erstma für eure schnell hilfe, aber ich bin erst seit ca 1nem moant in dem kurs, bisher sind wir echt erst bei funktionen und procedure, und was ihr mir bisher angeboten habt is irgendwie spanisch für mich, gehts ni auch einfacher mit schleifen oder so???
trotzdem danke!
mfg alex

Antwort 4 von Rangoo

Das ist so einfach wie möglich. *g* Du hast deine Funktion xy und in die schreibst du einfach die oben genannte Zeile rein...
Du könntest auch...
v:=1;
s:=1;
if x<0 then
x:=x*-1;
repeat
v:=v*10;
y:=x/v;
if y>1 then
s:=s+1;
until y<1;

s gibt dabei die Anzahl der Stellen an. Wenn du eine genauere Erklärung ders Ablaufs willst, melde dich noch mal.

So long

PS: Ich hoffe, mir ist kein Basic-Code ins Pascal gerutscht. Wäre dankbar, wenn du das mal überprüfst, Edeltraud.

Antwort 5 von Edeltraud

Hallo,

eine einfache Lösung mit der Case-Anweisung:

function Anzahl(Zahl : Integer): Integer;
begin
case zahl of
0..9 : Anzahl := 1;
10..99 : Anzahl := 2;
100..999 : Anzahl := 3;
1000..9999 : Anzahl := 4;
10000..99999 : Anzahl := 5;
end; {case}
end;



Antwort 6 von skaman

danke für eure schnelle hilfe!
werds glei ma probieren und es wird schon gehen, schreib das morgen nochma rein obs geklappt hat...
thx
mfg
alex

Antwort 7 von Rangoo

Ach jadele, noch ein kleiner Bugreport in meinem Code, auch wenn du den wohl nicht verwenden wirst: die drittletzte Zeile muss >= heißen, sonst stimmt das nicht...
Aber das nur so als Verbesserung. Habe kein Pascal mehr und konnte das deshalb nicht überprüfen. *g*

So long

Antwort 8 von Bluescorpion

Hi man könnte auch die Zahl in einer Schleife so lange durch zehn Teilen bis sie kleiner 1 ist, das sollte auch gehen und sieht besser.

MfG Andre

Antwort 9 von Rangoo

@Andre:
Was anderes tu ich ja eigentlich nicht. Ich vergrößere nur immer den Teiler um Faktor 10, das läuft also praktisch auf das Gleiche hinaus, schließlich zähle ich auch, bis die Zahl kleiner 1 ist.

Die Case-Anweisund von Edeltraud hat übrigens den Nachteil, dass man für jede Stellenzahl eine Anweisung schreiben muss.

Übrigens interessiert mich die Auflösung, Alex. *g*

So long

Antwort 10 von Edeltraud

Hallo,

hier noch eine Lösung mit repeat ... until

function Anzahl(Zahl : Integer): Integer;
var Stellen : Integer;
begin
Stellen := 0;
repeat
Zahl := Zahl div 10;
Inc(Stellen);
until Zahl <= 0;
Anzahl := Stellen;
end;

@Rangoo: / geht unter Pascal nicht so, wegen der strengen TypenPrüfung. Stattdessen div.

Case ist mir eben sofort eingefallen.

Gruss, Edeltraud

Antwort 11 von Rangoo

Damals, als ich Pascal gelernt habe, gab es solche Typenprüfungen noch nicht. Das war aber auch zu der Zeit, als Pascal noch TurboPascal hieß, unter DOS lief und keine Mausunterstützung hatte. Also gaaaaanz früher. ;-)
Wofür dient eigentlich Inc(Stellen);? Ist das der neue Ausdruck für Stellen:=Stellen+1;?
Übrigens solltest du
until Zahl<1; nehmen, oder? Wenn du teilst, wechselst du definitiv nie das Vorzeichen. Außerdem gilt bei 10:10, dass das Ergebnis 1 noch eine weitere Stelle zulässt.

So long

Antwort 12 von Edeltraud

Hallo Rangoo,

Inc = Increment 1
Inc(Stellen, 10) = Increment 10
Ist aber wie Stellen := Stellen+1;
nur schneller und weniger compilierter Code.

<= 0 ist schon richtig

denn in der 3 Teilung ist das Egebnis schon 1 und jetzt noch einmal geteilt ergibt 0,1 also <= 0.

Ist meiner Meinung nach der sichere Weg.
Da du ja bei der Funktion z.B. auch 0,5 übergeben kannst. Und auch dann soll es noch ohne RuntimeError funktionieren.

Gruss, Edeltraud

Antwort 13 von Rangoo

10/10=1, erste Stelle
1/10=0,1, zweite Stelle.
0<0,1, daher bei <=0
0,1/10=0,01, dritte Stelle
0,01/10=0,001, vierte Stelle
...
Zahlen ohne Minus sind grundsätzlich größer als 0. Es sei denn, du rundest sie unwahr, also mit int. Dann werden sie gleich 0.

So long

Antwort 14 von Edeltraud

Hallo Rangoo,

das mag in BASIC so sein.

In Pascal müssen die Variablen vorher definiert werden. In diesem Beispiel ist Zahl = Integer. 0,1 wäre aber schon keine GanzZahl mehr sondern ein Typ REAL. Also eine Zahl mit Nachkommastellen, und das geht in Pascal so nicht. Deshalb auch div statt /. / ist der Teiler für RealZahlen unter Pascal. Div liefert unter Pascal immer eine GanzZahl, Nachkommastellen werden abgeschnitten.

Daher ist <= 0 richtig.

Gruss, Edeltraud

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: