Viikonpäivä koneesta

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.
30439
Äänestä

Muut lukivat myös

Vastaukset 30

Vanhimmat

Mikä dos-versio? Mikä Basic?

Äänestä
  • DOS 7.1 ja POWERBASIC 3.5

    Äänestä

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.

Äänestä
  • Miten sinulla on noin heikko ulosanti?

    Äänestä

  • kryuuk kirjoitti:

    Miten sinulla on noin heikko ulosanti?

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

    Äänestä

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.

Äänestä
  • 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.

    Äänestä

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

    Äänestä

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

    Äänestä

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

Äänestä

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

1Äänestä

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

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

    Äänestä

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

    Äänestä

  • Niin?

    Äänestä

  • "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.

    Äänestä

  • 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

    Äänestä

  • 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

    Äänestä

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.

Äänestä
  • 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ä.

    Äänestä

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

    Äänestä

  • 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ä ?

    Äänestä

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

    Äänestä

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

    Äänestä

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.

Äänestä
  • 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.

    Äänestä

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

Äänestä

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?

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

    Äänestä

Kommentoi aloitusta


BASIC-käyttäjä kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu