Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
shiZZle
Anmeldungsdatum: 18.11.2007 Beiträge: 11
|
Verfasst am: 18.11.2007, 20:09 Titel: Syntax Probleme |
|
|
hi ich bin neu hier...wir sollen in der schule ein programm schreiben, dass ein Datum auf seine gültigkeit überprüfen soll.
Klingt ja zunächst ganz einfach, doch soll dort auch Schalljahre und die einzelnen tage eines Monats mit rein, d.h. 31, , 30 u.s.w.
Mein bisheriger Code :
Code: |
REM Datums_Gltigkeit
DIM tage AS INTEGER
DIM jahr AS INTEGER
DIM monat AS INTEGER
CLS
PRINT "Dieses Programm berprft, ob ihr angegebenes Datum gltig ist."
INPUT "Geben Sie zun„chst das Jahr ein:"; jahr
INPUT "Geben Sie jetzt den Monat ein:"; monat
INPUT "Zuletzt fehlt noch der Tag:"; tage
IF monat = 1 OR 3 OR 5 OR 7 OR 8 OR 10 OR 12 THEN
tage > 1 AND tage < 32
ELSE
tage = < 30
END IF
IF monat = 2 THEN tage =< 28
rest = jahr MOD 4
IF rest = 0 THEN tage(monat(2)) =< 29
PRINT "Ihr angegebenes Datum: "; tage; monat; jahr; " ist gltig!"
|
Vielleicht wisst ihr ja was ich da falsch mache aber es klappt einfach net. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.11.2007, 20:54 Titel: |
|
|
Code: | IF monat = 1 OR 3 OR 5 OR 7 OR 8 OR 10 OR 12 THEN |
Das geht so nicht. Das ist "Umgangssprache", so wie du es sprechen würdest. Für den Computer ist 1 or 3 or 5 aber etwas ganz anderes
In Basic musst du das wesentlich umständlicher schreiben, so:
Code: |
If monat = 1 OR monat = 2 OR monat = 3 .......
|
Was aber mit der SELECT CASE-Anweisung wesentlich eleganter funktioniert:
Code: |
SELECT CASE monat
CASE 1,2,3,.....
[tue dies]
CASE ELSE
[tue jenes]
END SELECT
|
was du allerdings mit
Code: |
tage > 1 AND tage < 32
|
bezwecken willst, ist mir unklar. Das macht noch nicht mal in der Umgangssprache sinn.
Ich gebe dir einen Tipp: Du musst dir erstmal eine Varibale "gueltig" anlegen
Code: | DIM gueltig as integer |
Und dann sollten deine IF- oder SELECT-Blöcke folgendermaßen aussehen:
Code: |
SELECT CASE monat
CASE 1,3,5,.....
IF tage < 0 tage > 30 THEN .......
CASE ELSE
IF tage < 0 tage > 31 THEN .......
|
Mehr verrate ich aber nicht, denn den Rest solltest du nun eindeutig selbst lösen können  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 18.11.2007, 21:05 Titel: |
|
|
Irgend wie kann ich mir nicht vorstellen, das der Quellcode fehlerfrei compiliert werden konnte .. hast du den überhaupt irgend wann mal compiliert?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
shiZZle
Anmeldungsdatum: 18.11.2007 Beiträge: 11
|
Verfasst am: 18.11.2007, 21:19 Titel: |
|
|
Zitat: |
was du allerdings mit
Code: |
tage > 1 AND tage < 32
|
bezwecken willst, ist mir unklar. Das macht noch nicht mal in der Umgangssprache sinn.
Ich gebe dir einen Tipp: Du musst dir erstmal eine Varibale "gueltig" anlegen
Code: | DIM gueltig as integer |
Und dann sollten deine IF- oder SELECT-Blöcke folgendermaßen aussehen:
|
Ich wollte damit bezwcken, dass er die entsprechenden Tage den Monaten zuordnen soll. Ich meine damit z.b., dass man den Juni eingibt und er dem Juni 30 tage zu schreibt, da er ansonsten ja denken könnte das der Juni 50 Tage hat.
Verstehste was ich meine xD ?
Zum anderen hätte ich ne andere frage:
Wenn ich jetzt sage
Code: |
SELECT CASE monat
CASE 1,3,...
IF ?
|
An dieser stelle würde ich gerne das einfgen was ich oben gtesagt habe:
IF SELECT CASE is richtig THEN
die frage ist nur wie man das schreiben muss das der sagt: Wenn der Select Case Befehl zutrifft DANN ... ( WENN DER SELECT CASE BEFEHL ZUTRIFFT AUF EINE DER MONATE DANN GEBE DEM MONAT 31 TAGE )
Sry aber ich bin nen Firschling in dem Gebiet.
Zu dem habe ich das mit der Variable gültig nicht ganz verstanden. Wieso muss ich mir den dafür eine anlgegen ? |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 18.11.2007, 21:29 Titel: |
|
|
Weil du dann später ganz einfach am Ende des Programms folgendes machen kannst:
Code: |
If gueltig=1 Then
Print "Gueltiges Datum"
Else
Print "Ungueltiges Datum"
End If
|
Du ersparst dir z.B. die Ausgaben bei jedem Prüfungskriterium. _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 18.11.2007, 21:31 Titel: |
|
|
Hallo
Du versuchst zwar, die maximale Anzahl Tage herauszufinden, die der entsprechende Monat hat, aber diesen Wert vergleichst Du dann nirgends mit dem, den man zu Beginn per INPUT für die Variable tage eingibt. Sie wird einfach überschrieben.
Gruß & Willkommen im Forum
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
shiZZle
Anmeldungsdatum: 18.11.2007 Beiträge: 11
|
Verfasst am: 18.11.2007, 21:56 Titel: |
|
|
ich glaube ich hab mich falsch ausgedrückt...
Ist schon richtig das sie überschrieben wird, gerade das will ich ja verhindern.
Ich meine eher, dass der Typ eingibt: 32.11.2008
Dann soll mein Programm doch irgendwie wissen, dass der november keine 32 Tage hat.
Versteht ihr wobei ich hilfe brauche xD ? |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 18.11.2007, 22:30 Titel: |
|
|
Versuchs doch mal so: Code: | Dim AnzahlTage(12)
For i=1 To 12
Read AnzahlTage(i)
Next
Data 31,28, 31,30, 31,30,31,31,30,31,30,31 | Dann haste die Anzahl der Tage schon mal in einem Array..
(daß der Februar eine Sonderbehandlung braucht, verrate ich dir aber nicht)
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
shiZZle
Anmeldungsdatum: 18.11.2007 Beiträge: 11
|
Verfasst am: 18.11.2007, 22:38 Titel: |
|
|
ytwinky hat Folgendes geschrieben: | Versuchs doch mal so: Code: | Dim AnzahlTage(12)
For i=1 To 12
Read AnzahlTage(i)
Next
Data 31,28, 31,30, 31,30,31,31,30,31,30,31 | Dann haste die Anzahl der Tage schon mal in einem Array..
(daß der Februar eine Sonderbehandlung braucht, verrate ich dir aber nicht)
Gruß
ytwinky |
Das mit dem Februar ist gar net mal soo schwer xD
Das ist doch irgendwie so nen Befehl wie
Rest = jahr MOD 4
und dann muss bei rest 0 rauskommen  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.11.2007, 22:43 Titel: |
|
|
shiZZle hat Folgendes geschrieben: |
Das ist doch irgendwie so nen Befehl wie
Rest = jahr MOD 4
und dann muss bei rest 0 rauskommen  |
Wikipedia hat Folgendes geschrieben: | Alle Jahre, welche durch 100 ohne Rest teilbar sind, sind keine Schaltjahre. |
nur um mal eben klugzuscheißen... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
shiZZle
Anmeldungsdatum: 18.11.2007 Beiträge: 11
|
Verfasst am: 18.11.2007, 22:46 Titel: |
|
|
was sagt ihr dazu
Code: |
REM Datums_Gltigkeit
DIM tage AS INTEGER
DIM jahr AS INTEGER
DIM monat AS INTEGER
DIM anzahltage(12) AS INTEGER
CLS
PRINT "Dieses Programm berprft, ob ihr angegebenes Datum gltig ist."
INPUT "Geben Sie zun„chst das Jahr ein:"; jahr
INPUT "Geben Sie jetzt den Monat ein:"; monat
INPUT "Zuletzt fehlt noch der Tag:"; tage
FOR i = 1 TO 12
READ anzahltage(i)
NEXT i
DATA 31, 28,31,30,31,30,31,31,30,31,30,31
IF anzahltage > 31 OR anzahltage = 0 THEN
PRINT "DATUM UNGšLTIG ! "
END IF
rest = jahr MOD 4
IF rest = 0 THEN anzahltage(2) = 29
IF anzahltage > 0 AND anzahltage < 32 THEN
PRINT "Ihr angegebenes Datum: "; tage; monat; jahr; " ist gltig!"
END IF
|
Es geht mir nicht nur darum das das Programm funktoniert sondern auch sauber ist und gut läuft..Also egal was ihr zu bemändegln habt. Her damit |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 18.11.2007, 22:51 Titel: |
|
|
Jojo hat Folgendes geschrieben: | Wikipedia hat Folgendes geschrieben:
Alle Jahre, welche durch 100 ohne Rest teilbar sind, sind keine Schaltjahre.
nur um mal eben klugzuscheißen...  |
da mach ich mit:
2000 ist ohne Rest durch 100 teilbar
trotzdem war 2000 ein Schaltjahr^^
@shiZZle:
Du solltest nur Programme posten, wenn du ganz genau weißt, daß sie auch laufen..
..und genau das tut dein Programm nicht! _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 18.11.2007, 22:59 Titel: |
|
|
ytwinky hat Folgendes geschrieben: | 2000 ist ohne Rest durch 100 teilbar
trotzdem war 2000 ein Schaltjahr^^ |
Jetzt verrat doch nicht alles, er soll den Artikel doch lesen und verstehen  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 18.11.2007, 23:02 Titel: |
|
|
Das kommt davon, weil du keinen Link gepostet hast, da mußte ich nachdenken..
(Gottseidank habe ich mich nicht verletzt dabei ) _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 18.11.2007, 23:02 Titel: |
|
|
Jahre, die ohne Rest durch 100 teilbar sind, sind keine Schaltjahre, aber nur dann, wenn sie nicht ohne Rest durch 400 teilbar sind.
@shiZZle: Du machst zwei große Fehler. anzahltage ist ein Array, bei der Wertezuweisung hast Du ja auch den Index i. Den lässt du später einfach weg. Und dann überprüst Du im Prinzip nur, ob diese Tageswerte für den Monat größer 0 und kleiner 32 sind. Aber das sind sie ja immer, bzw. wären sie immer, wenn sie einen Index hätten. Du musst doch vergleichen, ob der Wert, den man mit INPUT für tage eingegeben hat, nicht grösser ist, als die Zahl, die in anzahltage(monat) eingetragen ist.
Gruß
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
shiZZle
Anmeldungsdatum: 18.11.2007 Beiträge: 11
|
Verfasst am: 18.11.2007, 23:05 Titel: |
|
|
ok da haste rehct aber ich hab das programm jetzt umgeschrieben und ausprobiert. Es LÄUFT ! Aber es sieht irgendwie immer noch komisch aus. Keine Ahnung warum
Code: |
REM Datums_Gltigkeit
DIM tage AS INTEGER
DIM jahr AS INTEGER
DIM monat AS INTEGER
DIM anzahltage(12) AS INTEGER
DO
CLS
PRINT "Dieses Programm berprft, ob ihr angegebenes Datum gltig ist."
PRINT
INPUT "Geben Sie zun„chst das Jahr ein:"; jahr
PRINT
INPUT "Geben Sie jetzt den Monat ein:"; monat
PRINT
INPUT "Zuletzt fehlt noch der Tag:"; tage
PRINT
FOR i = 1 TO 12
READ anzahltage(i)
NEXT i
DATA 31, 28,31,30,31,30,31,31,30,31,30,31
IF tage > 31 OR tage = 0 THEN
[b][u]ODER IF tage(i) > anzahltage(i) THEN[/u][/b]
PRINT
PRINT "DATUM UNGšLTIG ! "
END IF
rest = jahr MOD 4
IF rest = 0 THEN anzahltage(2) = 29
IF tage > 0 AND tage < 32 THEN
PRINT "Ihr angegebenes Datum: "; tage; monat; jahr; " ist gltig!"
END IF
INPUT "Nochmal mit j"; auswahl$
auswahl$ = UCASE$(auswahl$)
PRINT
LOOP WHILE auswahl$ = "J"
PRINT
PRINT "PROGRAMMENDE!"
END
|
Wenn ihr mir net glaubt...kopiert den code und probierts aus
Wäre trotzdem dankbar wenn mir jmd. sagt wieso ich das als so komisch empfinde xD[/i] |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 18.11.2007, 23:12 Titel: |
|
|
Du bist nah dran. Aber Du prüftst jetzt, ob tage kleiner ist als 32 und nicht ob es nicht grösser als die erlaubten Tage ist. Also ein 31. Februar ist immer noch gültig. _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 18.11.2007, 23:16 Titel: |
|
|
Code: | If Monat<1 Or Monat>12 Then
Print "DATUM UNGšLTIG ! "
End If
If Tage <1 Or Tage>AnzahlTage(Monat) Then
Print "DATUM UNGšLTIG ! "
End If | ..ich verrate dir aber nicht, wie du das in deinen Code einbauen mußt..
btw:
Formatier-Tags funzen im Code nicht..
In welche Klasse gehst du eigentlich? _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO..
Zuletzt bearbeitet von ytwinky am 18.11.2007, 23:19, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
shiZZle
Anmeldungsdatum: 18.11.2007 Beiträge: 11
|
Verfasst am: 18.11.2007, 23:19 Titel: |
|
|
Skilltronic hat Folgendes geschrieben: | Du bist nah dran. Aber Du prüftst jetzt, ob tage kleiner ist als 32 und nicht ob es nicht grösser als die erlaubten Tage ist. Also ein 31. Februar ist immer noch gültig. |
Wieso das?
der wird doch dann hier rausgekickt?
Code: |
IF tage > anzahltage(monat) THEN
PRINT
PRINT "DATUM UNGšLTIG !
END IF
|
|
|
Nach oben |
|
 |
|