Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Syntax Probleme
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
shiZZle



Anmeldungsdatum: 18.11.2007
Beiträge: 11

BeitragVerfasst am: 18.11.2007, 20:09    Titel: Syntax Probleme Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.11.2007, 20:54    Titel: Antworten mit Zitat

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 zwinkern
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 zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1839
Wohnort: [JN58JR]

BeitragVerfasst am: 18.11.2007, 21:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
shiZZle



Anmeldungsdatum: 18.11.2007
Beiträge: 11

BeitragVerfasst am: 18.11.2007, 21:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 18.11.2007, 21:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 18.11.2007, 21:31    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
shiZZle



Anmeldungsdatum: 18.11.2007
Beiträge: 11

BeitragVerfasst am: 18.11.2007, 21:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.11.2007, 22:30    Titel: Antworten mit Zitat

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) happy
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 18.11.2007, 22:36    Titel: Antworten mit Zitat

Projekt von mir, das in eine ähnliche Richtung geht:

http://www.dreael.ch/Deutsch/Download/DatumBerechnung.html

Sonst als Grundlage für Deine Aufgabe:

http://de.wikipedia.org/wiki/Gregorianischer_Kalender
http://de.wikipedia.org/wiki/Schaltjahr#Gregorianischer_Kalender
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
shiZZle



Anmeldungsdatum: 18.11.2007
Beiträge: 11

BeitragVerfasst am: 18.11.2007, 22:38    Titel: Antworten mit Zitat

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) happy
Gruß
ytwinky


Das mit dem Februar ist gar net mal soo schwer xD happy

Das ist doch irgendwie so nen Befehl wie
Rest = jahr MOD 4
und dann muss bei rest 0 rauskommen happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.11.2007, 22:43    Titel: Antworten mit Zitat

shiZZle hat Folgendes geschrieben:

Das ist doch irgendwie so nen Befehl wie
Rest = jahr MOD 4
und dann muss bei rest 0 rauskommen happy


Wikipedia hat Folgendes geschrieben:
Alle Jahre, welche durch 100 ohne Rest teilbar sind, sind keine Schaltjahre.


nur um mal eben klugzuscheißen...happy
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
shiZZle



Anmeldungsdatum: 18.11.2007
Beiträge: 11

BeitragVerfasst am: 18.11.2007, 22:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.11.2007, 22:51    Titel: Antworten mit Zitat

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... happy

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 18.11.2007, 22:59    Titel: Antworten mit Zitat

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 happy
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.11.2007, 23:02    Titel: Antworten mit Zitat

Das kommt davon, weil du keinen Link gepostet hast, da mußte ich nachdenken..
(Gottseidank habe ich mich nicht verletzt dabei happy )
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 18.11.2007, 23:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
shiZZle



Anmeldungsdatum: 18.11.2007
Beiträge: 11

BeitragVerfasst am: 18.11.2007, 23:05    Titel: Antworten mit Zitat

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 happy

Wäre trotzdem dankbar wenn mir jmd. sagt wieso ich das als so komisch empfinde xD[/i]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 18.11.2007, 23:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 18.11.2007, 23:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
shiZZle



Anmeldungsdatum: 18.11.2007
Beiträge: 11

BeitragVerfasst am: 18.11.2007, 23:19    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz