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

342

    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. Ja taas ammuttu kokkolassa

      Kokkolaisilta pitäisi kerätä pois kaikki ampumaset, keittiöveitset ja kaikki mikä vähänkään paukku ja on terävä.
      Kokkola
      30
      3511
    2. Kukka ampu taas Kokkolassa?

      T. olisi hetkeä aiemmin lähtenyt johonkin. Naapuri kai tekijä J.K., ei paljasjalkainen Kokkolalainen, vaan n. 100km pääs
      Kokkola
      9
      1568
    3. Kuinka kauan

      Olet ollut kaivattuusi ihastunut/rakastunut? Tajusitko tunteesi heti, vai syventyivätkö ne hitaasti?
      Ikävä
      113
      1483
    4. Milli-helenalla ongelmia

      Suomen virkavallan kanssa. Eipä ole ihme kun on etsintäkuullutettu jenkkilässäkin. Vähiin käy oleskelupaikat virottarell
      Kotimaiset julkkisjuorut
      224
      1265
    5. Kun näen sinut

      tulen iloiseksi. Tuskin uskallan katsoa sinua, herätät minussa niin paljon tunteita. En tunne sinua hyvin, mutta jotain
      Ikävä
      34
      893
    6. Purra saksii taas. Hän on mielipuuhassaan.

      Nyt hän leikkaa hyvinvointialueiltamme kymmeniä miljoonia. Sotea romutetaan tylysti. Terveydenhoitoamme kurjistetaan. ht
      Maailman menoa
      242
      893
    7. Yhdelle miehelle

      Mä kaipaan sua niin paljon. Miksi sä oot tommonen pösilö?
      Ikävä
      60
      879
    8. Helena Koivu on äiti

      Mitä hyötyä on Mikko Koivulla kohdella LASTENSA äitiä huonosti . Vie lapset tutuista ympyröistä pois . Lasten kodista.
      Kotimaiset julkkisjuorut
      130
      878
    9. Ja taas kerran hallinto-oikeus että pieleen meni

      Hallinto-oikeus kumosi kunnanhallituksen päätöksen vuokratalojen pääomituksesta. https://sysmad10.oncloudos.com/cgi/DREQ
      Sysmä
      66
      854
    10. Löydänköhän koskaan

      Sunlaista herkkää tunteellista joka jumaloi mua. Tuskin. Siksi harmittaa että asiat meni näin 🥲
      Ikävä
      98
      819
    Aihe