Anfängerfrage programmieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
BlackJack

Oh, ja, grafische Programmierung — hier das was ich bisher immer gedacht hatte in Scratch zusammengeklickt:
Bild

Edit: Die Variante mit dem Schaltjahr:
Bild
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

BlackJack hat geschrieben:Oh, ja, grafische Programmierung — hier das was ich bisher immer gedacht hatte
Als Kontrast zur grafischen Variante, habe ich mal versucht, das mit einem 'klassischen' Werkzeug umzusetzen:

Code: Alles auswählen

dc -e '??+psd365sa0sb[Lb1+sbLd1+psdlbla>c]sclcx'
:)
pythonhoshy
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!!!
BlackJack

@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]
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

[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.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
pythonhoshy
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!
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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))
BlackJack

@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:
Bild
Die Variante mit Nachdenken in TurboPascal/Assembler:
Bild
Und noch mal Scratch:
Bild
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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...
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

pythonhoshy hat geschrieben:Sorry,war ein Interpretationsfehler meinerseits.
So geht es richtig:
Tag 1 = 1 Cent
Tag 2 = 3 Cent
Tag 3 = 6 Cent
[...]
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.

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))
Solltest du damit Probleme haben, dann frag noch mal nach, ansonsten solltest du jetzt auch in der Lage sein die Gesamtsumme zu ermitteln.

Alternativ kannst du natürlich auch einfach die Gaußsche Summenformel verwenden.
pythonhoshy
User
Beiträge: 7
Registriert: Samstag 11. Juni 2016, 15:54

Danke /me,
werde ich mir mal anschauen.
Antworten