Viikonpäivä koneesta

BASIC-käyttäjä

Millähän ilveellä saa vanhasta DOS käyttiksellä varustetusta läppäristä viikonpäivän ohjelmaan sisään? Kun heittää dos-tilassa DATE-komennon niin se tuo näytölle ensiksi tuon viikonpäivän (maanantai, tistai, keskiviikko jne) englanninkielisenä lyhenteenä mutta en ole keksinyt vielä miten se on kaivettavissa koneen sisuksista. Ohjelmoin BASICilla erästä sovellusta ja tarvitsen siihen viikonpäivää. Korostan vielä että tuo BASIC-ohjelma ei osaa kaivaa viikonpäivää DATE$-komennolla tuon läppärin sisuksista.

30

146

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • jgkjgkjg

      Mikä dos-versio? Mikä Basic?

      • BASIC-käyttäjä

        DOS 7.1 ja POWERBASIC 3.5


    • Onvaihtoehtoja

      FreeDos
      tai Dos2000

      asentuvat nykykoneellekkin.

      Päiväys juttu autoexec.bat:iin kirjoitetaan.

      Tai Qemu ja DosBox, tai dosbox nykyjärjestelmän päälle.
      tai sitten se ikivanha dos, jolloin biosta joudut nykykoneissa mylkkaan hurjasti.
      Kone kannataa valita sen mukaan, vanhan dossin rajoiteet on kamalat.

      • kryuuk

        Miten sinulla on noin heikko ulosanti?


      • kielen_tuhoaja
        kryuuk kirjoitti:

        Miten sinulla on noin heikko ulosanti?

        Ehkäpä vaan kirjuuttaa ns. älypuhelimesta, tuosta kielen rappeuttajasta.


    • räpärällää

      Jos ei muuta konstia löydy, niin eikö date-komennon tuloksen saa ohjattua tiedostoksi suurempi kuin merkillä > tiedosto.txt ja sitten ohjelmassa lukea se tiedosto, jotta saa viikonpäivän nimen. Toinen vaihtoehto esim. Zellerin funktio viikonpäivän selvittämiseksi, tai jokin oma mukaelma siitä 1900-2100 vuosille esimerkiksi...
      https://fi.m.wikipedia.org/wiki/Zellerin_sääntö
      https://fi.m.wikipedia.org/wiki/Modulaarinen_aritmetiikka

    • BASIC-käyttäjä

      Kiitoksia "räpärällää". Tuo Zellerin matematiikka on yksinkertainen ja ilmeisen varma. Eikä tarvitse kuin yhden rivin saadakseni aikaiseksi viikonpäivän. Tuo modulaarinen aritmetiikka oli vähän liikaa mulle ; en edes jaksanut lukea sitä kaikkea. Itse harkitsin alkuun tuota samaa, jota ehdotit eli SHELLillä DOSsiin ja DATE-käskyllä vasterotla muistiin ja niin edelleen mutta kun kerran pystyn BASICin sisällä' laskemaan viikonpäivän niin se on mielestäni paljon parempi ratkaisu. Kiitoksia vielä kerran.

      • räpärällää

        Kiitos kiitos. Taitaa olla Zellerin funktiosta kertoessaan Wikipedia nolosti väärässä, kun väittää tuota funktiota algoritmiksi. Algoritmi lienee sana, jolla tarkoitetaan (toistettavaa) prosessia mieluummin kuin yksinkertaista funktiota - josta arvo, vastaus tulee matemaattisen laskelman tarkkuudella samantien yhdellä kertaa.
        https://fi.wikipedia.org/wiki/Algoritmi

        Vaihtoehtoinen tapa viikonpäivien laskentaan olisi käyttää vuodenpäivänumeroita. Esim. tehdään funktio, joka selvittää onko vuosi karkausvuosi. Sitten toinen funktio, joka tuon äskeisen avulla laskee päiväykselle vuodenpäivänumeron. Funktio, joka laskee toisinpäin, jne. Mutta Zellerin kaava taisi olla riittävää yllä mainittuun tarkoitukseen.


      • OnSeAlgoritmi
        räpärällää kirjoitti:

        Kiitos kiitos. Taitaa olla Zellerin funktiosta kertoessaan Wikipedia nolosti väärässä, kun väittää tuota funktiota algoritmiksi. Algoritmi lienee sana, jolla tarkoitetaan (toistettavaa) prosessia mieluummin kuin yksinkertaista funktiota - josta arvo, vastaus tulee matemaattisen laskelman tarkkuudella samantien yhdellä kertaa.
        https://fi.wikipedia.org/wiki/Algoritmi

        Vaihtoehtoinen tapa viikonpäivien laskentaan olisi käyttää vuodenpäivänumeroita. Esim. tehdään funktio, joka selvittää onko vuosi karkausvuosi. Sitten toinen funktio, joka tuon äskeisen avulla laskee päiväykselle vuodenpäivänumeron. Funktio, joka laskee toisinpäin, jne. Mutta Zellerin kaava taisi olla riittävää yllä mainittuun tarkoitukseen.

        Wikipediassa sanotaan algoritmista:
        "Algoritmi on yksityiskohtainen kuvaus tai ohje siitä, miten tehtävä tai prosessi suoritetaan; jota seuraamalla voidaan ratkaista tietty ongelma"

        Onhan tuossa Zellerin tapauksessa ilman muuta käsillä tietty ongelma eli se että kun on päiväys, niin mikä viikonpäivä silloin on.

        Ja ilman muutahan Zellerin menetelmä on yksityiskohtainen kuvaus siitä miten kyseinen ongelma ratkeaa. Algoritmi se on silloin.


      • räpärällää
        OnSeAlgoritmi kirjoitti:

        Wikipediassa sanotaan algoritmista:
        "Algoritmi on yksityiskohtainen kuvaus tai ohje siitä, miten tehtävä tai prosessi suoritetaan; jota seuraamalla voidaan ratkaista tietty ongelma"

        Onhan tuossa Zellerin tapauksessa ilman muuta käsillä tietty ongelma eli se että kun on päiväys, niin mikä viikonpäivä silloin on.

        Ja ilman muutahan Zellerin menetelmä on yksityiskohtainen kuvaus siitä miten kyseinen ongelma ratkeaa. Algoritmi se on silloin.

        Trigonometriassa saattaa olla "ongelmana" esim. että selvitetään tangentin arvo asteluvulle 67. Vastauksen selvittämiseen ei minun mielestäni tarvita algoritmi, vaan funktio, mutta ehkä on sitten kyse näkökulmasta, mitä miksikin nimitetään milloinkin.

        Tuossa Wikipedia-määritelmässä puhuttiin nimenomaan prosessista, jota itsekin mainitsin edellä. Prosessiin saattaa sisältyä toimintoja, että hae tämä asia tuolta, tai tuolta, kunnes löytyy sopiva yhdistelmä, tai jotain toimintoja tehdään, jotka eivät ole matemaattiseksi lausekkeeksi muotoiltavissa/muotoiltu. Mutta funktiosta arvo tulee helposti, matemaattisen lausekkeen tavalla, kuten esim. 2 3 =5. Siinä mielessä Zellerin sääntö tai kaava voidaan kyllä ohjelmoida funktioksi, tai nimittää sitä funktioksi.

        Eihän esim. trigonometrian funktioista yleensä käytetä nimitystä, että algoritmi? Toki voidaan jotain funktioita yrittää vääntää algoritmin muotoon esim. Taylorin polynomilla.


    • Trollessonni

      Valmiita dos ohjelmia on päiväyksen sanaliseen ilmoitukseen, jos 2k ongelmaa ole niissä.
      Hoh hoh. ettei olis vastannut itselleen????

    • Laazz00

      Jos haluat nopeutta käytä free pascalia. Se on nykyaikaisin kääntäjä (ohjelmointikieli) dosille.
      Päivämäärän saat selville funktiolla DayOfTheWeek . Se kertoo sen ISO 8601 mukaisesti.
      Jos käyttämäsi kieli pystyy lukemaan komentoriviltä niin voit hyödyntää free pascalia siinäkin. Lisäksi sillä on laajin suomenkielinen ohjesivusto netissä.

    • BASIC-koodari

      Okei nyt kun Homma tuli hoidettua BASICilla ja DOS 7.1 kanssa niin jos haluan tuon saman homman tehdä niin että se pyörii Vanhassa Xp-läppärissä niin mitähän ohjelmointikieltä kannattaisi käyttää?
      BASIC on pois suljettu ellei sitä sitten aja EXE-muotoon. (täytyykin kokeilla!) Vaatimuksena on että em. ohjelma ei vaadi liikaa asennettavaa koneeseen tai on implementoitavissa koneeseen tosi helposti.
      Ehdotettuja ohjelmointikieliä: FreeDos, Dos2000, free pascal
      Xp:n jälkeen seuraavaksi täytyy varmastikin mennä LINUX-palstalle kyselemään PYTHON-ohjeita

      • jjjjjjjjj

        Ohjelmointikieliä jutussasi on Basic, free pascal ja python, muut ovat jonkinlaisia käyttöjärjestelmiä.


      • räpärällää
        jjjjjjjjj kirjoitti:

        Ohjelmointikieliä jutussasi on Basic, free pascal ja python, muut ovat jonkinlaisia käyttöjärjestelmiä.

        Esim. DOSsissa on ollut mahdollista harrastaa pienimuotoista, rajallista ohjelmointia BAT-tiedostoihin. Käytellä siinä samoja komentoja, tiedostoihin ohjaamisia, ja samoja parametrejä kuin komentoriviltäkin. Periaatteessa olisi mahdollista tehdä vaikka kortistointiohjelma DOSsilla niin, että data on tekstiriveinä tekstitiedostossa. Kukin tietoalkio tietyssä positiossa rivillä, tietyssä sarakkeessa. Sitten mahdollista lajitella SORT-komennolla käyttäen sarakenumeroa parametrina. Tehdä hakuja FIND-lausekkeilla, jne. Datan selailuun ja muunteluun voisi sitten käyttää vaikka tekstinkäsittelyohjelmia, jotka TXT-tiedostomuotoa ymmärtävät. Tai periaatteessa voidaan kirjoittaa suoraan näyttöruudulta rivejä tiedostoihin COPY CON... -tyyppisellä lausekkeella...


      • gftukfyukgfuk

        Niin?


      • räpärällää

        "jos haluan tuon saman homman tehdä niin että se pyörii Vanhassa Xp-läppärissä niin mitähän ohjelmointikieltä kannattaisi käyttää?"

        Voihan DOS-koneissa käyttää vaikka assembleria pienten rutiinien vääntämiseen.

        Pascal muistuttaa C:tä. Erilaiset välimerkit. Yhdessä kielessä käytetään yhdenlaisia sulkumerkkejä, toisessa toisenlaisia. Joku saattaisi mieluummin käyttää Pascalia kuin C-kieltä.

        Kääntäjä, COM- tai EXE-muotoon kääntäminen, saattaa olla parempi kuin tulkkikielen kautta käytellä ohjelmia.


      • Anonyymi

        Nonni .....Nyt se sama ohjelma pyörii Raspberry Pi 1:llä Pythonilla ja homma on varmistettu RTC:llä verkkohäiriöiden varalta.
        Meni aika kauan ennenkuin tajusin että pythonin grafiikka ja ruudunkäsittely ovat erillisiä ohjelmia tai moduleta ja joista yksi on Tkinter. Se tuntuu riittävältä ja on ihan tarpeeksi vaikea opeteltava.
        Myös Raspianin kehittyneisyys yllätti positiivisesti. Sehän on täysverinen Linux tosin pirullisen hidas kun on tottunut kunnon koneen vauhtiin.
        BASIC-koodari


      • Anonyymi

        Tuo Zellerin algoritmi muuten toimii ihan hyvin mutta sen soveltaminen noiden tammi- ja helmikuun osalta tekee sen vain hieman työlääksi.

        h=(q (((m 1)*26)/10) K (K/4) (J/4)-2*J) mod7

        missä :
        • q = kuukauden päivä, esimerkiksi 6.12.1917
        • m = kuukauden järjestysluku, esimerkiksi 6.12.1917. Huom: tammi- ja helmikuu ovat järjestysluvultaan 13 ja 14 edellisenä vuonna eli vuosiluvusta on vähennettävä yksi.
        • K = vuosiluvun kaksi viimeistä numeroa, ( Vuosi MOD 100), esimerkiksi 6.12.1917
        • J = vuosiluvun kaksi ensimmäistä numeroa, ( Vuosi/100), esimerkiksi 6.12.1917
        • h = viikonpäivä (0 = lauantai, 1 = sunnuntai, 2 = maanantai, ...)

        BASIC-koodari


    • Eihän tuo ole kuin ihan simppeli koodinpätkä. Laske päivän numero ja ota modulo 7 ja sitten säädä tulos oikeaksi.

      n=int(365.25*(vuosi-1))
      for i=1 to k-1: n=n kuunpituus(v):next i
      n=n=n p-1
      if v mod 4=0 and k>2 then n=n 1
      vp=(n xx) mod 7 1

      Sitten testaamalla katsot arvon xx:lle.

      Aikanaan tuli taskubasicilla tehtyä tuo yhdellä kaavalla. Tuo -1 kolmannella rivillä on turha, kun xx hoitaa homman.

      • Cobol-ja-basic

        Itse olen nähnyt jonkun muun kaavan. Silloin elettiin 80-luvun alkuvuosia ja olin ekassa ATK-alan työpaikassani. Nyt on jo viimeinenkin taaksejäänyttä elämää, herrojen tahdosta. En ole ihan vielä eläkkeellä, ja joudun vielä muodon vuoksi hakemaan töitä. Ensimmäiseenkään haastatteluun ei enää pääse yli 60-vuotiaana, mutta kun Sipilän idioottia pitää TE-keskusten totella.

        Ei tuo nyt näytä ollenkaan toimivalta, mikä on xx? En nyt puhu muuttujien alustuksista enkä tyyppimäärittelyistä.


      • Cobol-ja-basic kirjoitti:

        Itse olen nähnyt jonkun muun kaavan. Silloin elettiin 80-luvun alkuvuosia ja olin ekassa ATK-alan työpaikassani. Nyt on jo viimeinenkin taaksejäänyttä elämää, herrojen tahdosta. En ole ihan vielä eläkkeellä, ja joudun vielä muodon vuoksi hakemaan töitä. Ensimmäiseenkään haastatteluun ei enää pääse yli 60-vuotiaana, mutta kun Sipilän idioottia pitää TE-keskusten totella.

        Ei tuo nyt näytä ollenkaan toimivalta, mikä on xx? En nyt puhu muuttujien alustuksista enkä tyyppimäärittelyistä.

        xx on luku, joka selviää testaamalla.


      • Basic-vai-Basica
        okaro kirjoitti:

        xx on luku, joka selviää testaamalla.

        Miten tuota xx lukua pitää testata ?

        Tarkistin tuon koodisi, ja tulos oli:
        Rivi 1.) Asettaa n -muuttujan arvoksi -366
        Rivi 2.) Ei tee yhtään mitään.
        Rivi 3.) Asettaan n -muuuttujan arvoksi 0
        Rivi 4.) Asettaan n -muuuttujan arvoksi 0 (Sama tulos kuin rivillä 3) 
        Rivi 5.) Asettaa vp -muuttujan arvoksi 1

        Mitä tuon koodin pitäisi tehdä ?


      • Basic-vai-Basica kirjoitti:

        Miten tuota xx lukua pitää testata ?

        Tarkistin tuon koodisi, ja tulos oli:
        Rivi 1.) Asettaa n -muuttujan arvoksi -366
        Rivi 2.) Ei tee yhtään mitään.
        Rivi 3.) Asettaan n -muuuttujan arvoksi 0
        Rivi 4.) Asettaan n -muuuttujan arvoksi 0 (Sama tulos kuin rivillä 3) 
        Rivi 5.) Asettaa vp -muuttujan arvoksi 1

        Mitä tuon koodin pitäisi tehdä ?

        Emme elä vuotta 0. Ensimmäinen rivi antaa arvon 737074. Toisen jälkeen arvo on 737164. Kolmannella on selvästi typo, mutta se lisää arvon 1 eli 737165. Neljäs ei muuta.

        xx:ää testataan vaikka luvuilla 0..6 kunnes tulos on oikein. Modulo antaa arvon 2, joten oikeav arvo vaikuttaa olevan 6.


      • Basic-vai-Basica
        okaro kirjoitti:

        Emme elä vuotta 0. Ensimmäinen rivi antaa arvon 737074. Toisen jälkeen arvo on 737164. Kolmannella on selvästi typo, mutta se lisää arvon 1 eli 737165. Neljäs ei muuta.

        xx:ää testataan vaikka luvuilla 0..6 kunnes tulos on oikein. Modulo antaa arvon 2, joten oikeav arvo vaikuttaa olevan 6.

        Eli mitä se koodisi pitäisi tehdä, onko se joku periaatteessa ehkä näin juttu ? etkä niin ollen ole tarkoittanutkaan sen palauttavan jotain arvoa.


    • räpärällää

      Tuossa niitä konsteja oli jo ylempänä:
      https://keskustelu.suomi24.fi/t/15596128/viikonpaiva-koneesta#comment-96984526

      Jos halutaan ohjelmoimalla ohjelmoida, sitten karkausvuoden laskemiseksi on muistaakseni sääntönä
      - yleensä neljällä jaolliset vuodet ovat karkausvuosia, paitsi
      - sadalla jaolliset eivät ole, paitsi
      - neljälläsadalla jaolliset ovat, mutta
      - vielä on poikkeuksena tietty vuosiluku... 4840.

      https://fi.wikipedia.org/wiki/Gregoriaaninen_kalenteri
      https://issuu.com/janttisuku/docs/laurentius_58

      Voitaisiin valmistaa funktio karkausvuoden selvittämiseksi.
      Toisella funktiolla voitaisiin muuntaa päiväys vuodenpäivänumeroksi. Esim. tänä vuonna huhtikuun 1. päivä on vuoden 91. päivä. Siitä pystynee laskemaan viikon numeron ja viikonpäivän, kun tiedetään, että vuosi alkoi maanantailla, ja 1. viikko on se viikko, jolle osuu vuoden ensimmäinen torstai.
      Toki päiväyksen tarkistamiseen voisi olla funktio myös. Tarkistamaan, ettei käyttäjä syötä koneelle päiväksi esim. 37. päivä 13. mätäkuuta.

      Mitä yksinkertaisemmaksi rusinaksi saa kutistettua funktion, sen parempi. Mielestäni tuo Zeller on sitä jo tehnyt oivallisesti.

      • räpärällää

        Täsmennystä tai korjausta:

        Vuosi 2018 alkoi maanantaipäivällä
        Vuosi 2019 tiistailla
        Vuosi 2020 alkaisi keskiviikolla, karkausvuosi, joten
        Vuosi 2021 alkaisi perjantailla...

        Menikö laskelma oikein tällä kertaa?
        Nyt jos muistetaan, että maanantaina oli vuodenpäivä 91 (eli 1.huhtikuuta), niin siitä on helppo laskea, 91 on jaollinen seitsemällä. Voidaan päätellä sitten, että vuosi alkoi tiistailla.

        Tähtitieteen almanakoissa on käytetty juliaanista päivänumeroa.
        https://www.ursa.fi/kirjat/lisamateriaalia/tahdet-vuosikirja/lisamateriaali-2016/juliaaninen-paivamaara.html

        Tuossa olisi ohjelmoijille taas yksi vaihtoehtoinen tapa käsitellä päiväyksiä. Sivulta löytyy valmis kaava.


    • Anonyymi

      Joskus oli paivays.sys
      Joka toi kellonajan ja suomenkielisen päivän oikeeseen alalaitaan.
      vastavia eng yms. oli myös.
      Oli myös kaynistin.sys joka teki alalaitaan käynistin palkin ja siinäkin oli päivämäärä ja kello.
      sai sittenn valita jos omisti hiiren, käynistää mm. doom suoraan kuvakkeesta palkissa.
      Dosillahan tehtiin paljon juttuja, joihin koodatiin itse ohjelma joskus 1980 luvulla

    • Anonyymi

      Eri ohjelmointikielistä saattaa löytyä erilaisia valmiita funktioita. - Mistä tekstinkäsittelyohjelma tai taulukkolaskenta nuuskii päiväyksen tiedot? Onko käyttöjärjestelmässä jokin tietty muistipaikka varattu, esittämään tuota tietoa?

      • Anonyymi

        Kyse on kuluneista sekunneista 1 January 1970 00:00:00 lähtien. Esim nyt kello on 1558019992.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Voitasko leikkiä jotain tunnisteleikkiä?

      Tietäisi ketä täällä käy kaipaamassa.. kerro jotain mikä liittyy sinuun ja häneen eikä muut tiedä. Vastaan itsekin kohta
      Ikävä
      77
      1766
    2. Tietysti jokainen ansaitsee

      Hän varmasti ansaitsee vain parasta ja sopivinta tietenkin, suon sen onnen hänelle enemmän kuin mielelläni. Aika on nyt
      Ikävä
      18
      1679
    3. Millä voin

      Hyvittää kaiken?
      Ikävä
      14
      1468
    4. En voi sille mitään

      Tulen niin pahalle tuulelle tästä paikasta nykyisin. Nähnyt ja lukenut jo kaiken ja teidän juttu on samaa illasta toisee
      Ikävä
      12
      1164
    5. 50+ naiset kyl

      Lemottaa sillille mut myös niitte kaka lemottaa pahlle ku kävin naiste veskis nuuhiin
      Ikävä
      19
      1153
    6. Välitän sinusta mies

      Kaikki mitä yritin kertoa tänään ei mennyt ihan putkeen..Joka jäi jälkeenpäin ajateltuna suoraan sanottuna harmittaa aiv
      Työpaikkaromanssit
      5
      1151
    7. hieman diabetes...

      Kävin eilen kaverin kanssa keskusapteekissa kun on muutama kuukausi sitten tullut suomesta ja oli diabetes insuliinit lo
      Pattaya
      12
      1106
    8. Annetaanko olla vaan

      Siinä se, tavallaan kysymys ja toteamuskin. Niin turhaa, niin rikkovaa. On niin äärettömän tärkeä, ja rakas olo.. N
      Ikävä
      29
      1101
    9. Miten joku voi käyttää koko elämänsä

      siihen että nostelee täällä vanhoja ketjuja ja troIIaa niihin jotain linkkiä mitä kukaan ei avaa? Ihmisellä ei ole mitää
      Tunteet
      6
      1089
    10. Pakkoruotsi on leikkikieli, jota ei ole tarkoituskaan osata

      Pakkoruotsi on leikkikieli. Ennen leikkikieltä sanottiin siansaksaksi, sitten keksittiin tilalle pakkoruotsi. Pakkoruot
      Kielipolitiikka
      7
      1074
    Aihe