Oh, ja, grafische Programmierung — hier das was ich bisher immer gedacht hatte in Scratch zusammengeklickt:
Edit: Die Variante mit dem Schaltjahr:
Anfängerfrage programmieren
Als Kontrast zur grafischen Variante, habe ich mal versucht, das mit einem 'klassischen' Werkzeug umzusetzen:BlackJack hat geschrieben:Oh, ja, grafische Programmierung — hier das was ich bisher immer gedacht hatte
Code: Alles auswählen
dc -e '??+psd365sa0sb[Lb1+sbLd1+psdlbla>c]sclcx'
-
- User
- Beiträge: 7
- Registriert: Samstag 11. Juni 2016, 15:54
Sorry,war ein Interpretationsfehler meinerseits.
So geht es richtig:
Tag 1 = 1 Cent
Tag 2 = 3 Cent
Tag 3 = 6 Cent
Tag 4 = 10 Cent
Tag 5 = 15 Cent
Tag 6 = 21 Cent
Tag 7 = 28 Cent
Tag 365 = ? Cent
Und nochmals Entschuldugung wegen dem Fehler!!!
So geht es richtig:
Tag 1 = 1 Cent
Tag 2 = 3 Cent
Tag 3 = 6 Cent
Tag 4 = 10 Cent
Tag 5 = 15 Cent
Tag 6 = 21 Cent
Tag 7 = 28 Cent
Tag 365 = ? Cent
Und nochmals Entschuldugung wegen dem Fehler!!!
@pythonhoshy: Falls die Frage immer noch ist wie man das programmiert: Mit einer Schleife wenn man Anfänger ist oder mit den Funktionen `sum()` und `range()` wenn man Python-Programmierer ist. Oder man benutzt die schwabbelige Masse zwischen den Ohren und denkt darüber nach wie man das in einer geschlossenen Formel ausdrücken kann. Das soll ein gewisser Mathematiker angeblich in der Schule herausgefunden haben weil er keinen Bock hatte die Zahlen alle einzeln zu addieren.
Mein Java-Programm würde ich dann gerne in das hier ändern:
[codebox=java5 file=Unbenannt.java]import java.io.IOException;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) throws IOException {
System.out.println(IntStream.rangeClosed(1, 365).sum());
}
}[/code]
Mein Java-Programm würde ich dann gerne in das hier ändern:
[codebox=java5 file=Unbenannt.java]import java.io.IOException;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) throws IOException {
System.out.println(IntStream.rangeClosed(1, 365).sum());
}
}[/code]
[codebox=pycon file=Unbenannt.txt]>>> N = 365
>>> # SELBSTZENSUR
66795.0[/code]
Wie gesagt, handelt es sich um ein mathematisches Problem, welches man ohne Computer lösen kann.
>>> # SELBSTZENSUR
66795.0[/code]
Wie gesagt, handelt es sich um ein mathematisches Problem, welches man ohne Computer lösen kann.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
-
- User
- Beiträge: 7
- Registriert: Samstag 11. Juni 2016, 15:54
Hallo BlackJack und bwbg,
glaube ich Euch dass das ein mathematisches Problem ist.Ich hätte nur gerne gewusst wie das gesamte Programm in Python aussehen würde.
Danke!
glaube ich Euch dass das ein mathematisches Problem ist.Ich hätte nur gerne gewusst wie das gesamte Programm in Python aussehen würde.
Danke!
@pythonhoshy: wirf einfach von BlackJacks java-Programm beliebige 90% aller Zeichen weg, rühr noch einmal um und erhalte einfaches Python:
Code: Alles auswählen
print sum(range(1,366))
@pythonhoshy: Das Programm würde so aussehen das man über das mathematische Problem nachdenkt und dann die daraus resultierende Formel (bwbg's Selbstzensurkommentar) einfach ausrechnet. Da sind ja keine exotischen Rechenoperationen enthalten. Oder man denkt nicht nach sondern löst das ganze einfach so wie man das auch von Hand machen würde, mit einer Schleife. Die solltest Du hinbekommen. Falls nicht, wüsste ich gerne mit welchem Lernmaterial Du arbeitest. Das sind absolute Grundlagen.
Die BASIC-Lösung auf dem C64 sieht so aus, die mit Nachdenken wäre etwas kürzer:
[codebox=locobasic file=Unbenannt.txt]10 A=0:FOR D=1 TO 365:A=A+D:NEXT:PRINT A;"CENTS AT THE END OF THE YEAR."[/code]
Die entsprechende Assembler-Lösung auf dem C64 wird etwas komplizierter weil das Ergebnis nicht mehr in 16-Bit passt. Deshalb muss man für die Umwandlung in eine Zeichenkette über die Gleitkommaroutinen des BASICs gehen:
[codebox=6502acme file=Unbenannt.txt] N = 365
cents = $b0
strout = $ab1e
s32_to_fac = $bcd5
fac_to_string = $bddd
.rodata
txt: .byte " cents at the end of the year.", 13, 0
.code
.proc main
ldx #0
stx cents
stx cents+1
stx cents+2
ldy #1
loop:
clc
tya
adc cents
sta cents
txa
adc cents+1
sta cents+1
bcc :+
inc cents+2
:
iny
bne :+
inx
:
cpy #<(N+1)
bne loop
cpx #>(N+1)
bne loop
lda #0
tay
sta $68
sta $62
lda cents+2
sta $63
lda cents+1
sta $64
lda cents
sta $65
jsr s32_to_fac
jsr fac_to_string
lda #<$0101
ldy #>$0101
jsr strout
lda #<txt
ldy #>txt
jmp strout
.endproc[/code]
Die Variante ohne Nachdenken in TurboPascal/Assembler:
Die Variante mit Nachdenken in TurboPascal/Assembler:
Und noch mal Scratch:
Die BASIC-Lösung auf dem C64 sieht so aus, die mit Nachdenken wäre etwas kürzer:
[codebox=locobasic file=Unbenannt.txt]10 A=0:FOR D=1 TO 365:A=A+D:NEXT:PRINT A;"CENTS AT THE END OF THE YEAR."[/code]
Die entsprechende Assembler-Lösung auf dem C64 wird etwas komplizierter weil das Ergebnis nicht mehr in 16-Bit passt. Deshalb muss man für die Umwandlung in eine Zeichenkette über die Gleitkommaroutinen des BASICs gehen:
[codebox=6502acme file=Unbenannt.txt] N = 365
cents = $b0
strout = $ab1e
s32_to_fac = $bcd5
fac_to_string = $bddd
.rodata
txt: .byte " cents at the end of the year.", 13, 0
.code
.proc main
ldx #0
stx cents
stx cents+1
stx cents+2
ldy #1
loop:
clc
tya
adc cents
sta cents
txa
adc cents+1
sta cents+1
bcc :+
inc cents+2
:
iny
bne :+
inx
:
cpy #<(N+1)
bne loop
cpx #>(N+1)
bne loop
lda #0
tay
sta $68
sta $62
lda cents+2
sta $63
lda cents+1
sta $64
lda cents
sta $65
jsr s32_to_fac
jsr fac_to_string
lda #<$0101
ldy #>$0101
jsr strout
lda #<txt
ldy #>txt
jmp strout
.endproc[/code]
Die Variante ohne Nachdenken in TurboPascal/Assembler:
Die Variante mit Nachdenken in TurboPascal/Assembler:
Und noch mal Scratch:
Wer es an einem Wochenende nicht hinbekommt, Zahlen in einer Schleife zu addieren – selbst nachdem ihm sogar das Stichwort "Schleife" genannt wurde – der sollte sich IMHO fragen ob Programmieren das Richtige für ihn ist...
Man kann jetzt alles untereinander hinschreiben oder sich überlegen, wie das Geld für jeden Tag sich anhand einer Formel ermitteln lässt. Am ersten Tag bekommst du zur Geldmenge die an diesem Tag addiert werden soll einen Cent hinzu, am zweiten 2 Cent, am dritten 3 Cent usw.pythonhoshy hat geschrieben:Sorry,war ein Interpretationsfehler meinerseits.
So geht es richtig:
Tag 1 = 1 Cent
Tag 2 = 3 Cent
Tag 3 = 6 Cent
[...]
Das sieht nicht nur wie eine einfache Schleife über alle Tage aus, es ist auch eine.
Code: Alles auswählen
current_money = 0
for day in range(1, 366):
current_money += day
print('day: {} money: {}'.format(day, current_money))
Alternativ kannst du natürlich auch einfach die Gaußsche Summenformel verwenden.
-
- User
- Beiträge: 7
- Registriert: Samstag 11. Juni 2016, 15:54
Danke /me,
werde ich mir mal anschauen.
werde ich mir mal anschauen.