Pieniä kysymyksiä ohjelmoinnista

Taas pyytäisin neuvoa tällaisessa tehtävässä. Onko nämä tehtävät jotenkin vaikeita vai miten en käsitä... Olen kysellyt tekoälyltäkin apua mutta en vain onnistu tässä: Tehtäväpohjassa on ohjelma, joka sisältää toiminnallisuuden puhelinnumeroiden lukemiseen käyttäjältä. Tämän jälkeen aloitetaan puhelinnumeroiden hakutoiminnallisuus. Hakutoiminnallisuus (yksiparametrisessa funktiossa numerohaku(numerot)) on yhä toteuttamatta. Muokkaa funktiota numerohaku siten, että se kysyy käyttäjältä haettavaa numeroa (muodossa Syötä etsittävä numero, tyhjä lopettaa.). Mikäli käyttäjä syöttää tyhjän merkkijonon (syote == ''), numerohakutoiminnallisuus lopetetaan. Muulloin ohjelma etsii numeroa numerot-sanakirjasta ja tulostaa merkkijonon Numeron <em>numero</em> omistaja on <em>omistaja</em>, missä numero on käyttäjän syöttämä numero ja omistaja on sanakirjasta löytynyt arvo. Mikäli sanakirjasta ei löydy omistajaa avaimelle, ohjelman tulee tulostaa Numeron <em>numero</em> omistajaa ei löydy.Tämän jälkeen käyttäjältä kysytään seuraavaa haettavaa numeroa.Alla esimerkki funktion suorituksesta. Oletuksena on, että sanakirjassa on numeroa "12312345" vastaava henkilö "Essi Esimerkki".
Syötä etsittävä numero, tyhjä lopettaa.
12312345
Numeron 12312345 omistaja on Essi Esimerkki
Syötä etsittävä numero, tyhjä lopettaa.
12312345
Numeron 12312345 omistaja on Essi Esimerkki
Syötä etsittävä numero, tyhjä lopettaa.
912831923
Numeron 912831923 omistajaa ei löydy.
Koodi:
import 'dart:io';

main() {
  var numerot = lueNumerot();
  numerohaku(numerot);
}

numerohaku(numerot) {}

lueNumerot() {
  var numerot = {};

  while (true) {
    print('Syötä numero, tyhjä lopettaa.');
    var numero = stdin.readLineSync();
    if (numero == '') {
      break;
    }
    print('Syötä numeron $numero omistaja.');
    var omistaja = stdin.readLineSync();

    numerot[numero] = omistaja;
  }

  return numerot;
}
 
Taas pyytäisin neuvoa tällaisessa tehtävässä. Onko nämä tehtävät jotenkin vaikeita vai miten en käsitä... Olen kysellyt tekoälyltäkin apua mutta en vain onnistu tässä: Tehtäväpohjassa on ohjelma, joka sisältää toiminnallisuuden puhelinnumeroiden lukemiseen käyttäjältä. Tämän jälkeen aloitetaan puhelinnumeroiden hakutoiminnallisuus. Hakutoiminnallisuus (yksiparametrisessa funktiossa numerohaku(numerot)) on yhä toteuttamatta. Muokkaa funktiota numerohaku siten, että se kysyy käyttäjältä haettavaa numeroa (muodossa Syötä etsittävä numero, tyhjä lopettaa.). Mikäli käyttäjä syöttää tyhjän merkkijonon (syote == ''), numerohakutoiminnallisuus lopetetaan. Muulloin ohjelma etsii numeroa numerot-sanakirjasta ja tulostaa merkkijonon Numeron <em>numero</em> omistaja on <em>omistaja</em>, missä numero on käyttäjän syöttämä numero ja omistaja on sanakirjasta löytynyt arvo. Mikäli sanakirjasta ei löydy omistajaa avaimelle, ohjelman tulee tulostaa Numeron <em>numero</em> omistajaa ei löydy.Tämän jälkeen käyttäjältä kysytään seuraavaa haettavaa numeroa.Alla esimerkki funktion suorituksesta. Oletuksena on, että sanakirjassa on numeroa "12312345" vastaava henkilö "Essi Esimerkki".
Syötä etsittävä numero, tyhjä lopettaa.
12312345
Numeron 12312345 omistaja on Essi Esimerkki
Syötä etsittävä numero, tyhjä lopettaa.
12312345
Numeron 12312345 omistaja on Essi Esimerkki
Syötä etsittävä numero, tyhjä lopettaa.
912831923
Numeron 912831923 omistajaa ei löydy.
Koodi:
import 'dart:io';

main() {
  var numerot = lueNumerot();
  numerohaku(numerot);
}

numerohaku(numerot) {}

lueNumerot() {
  var numerot = {};

  while (true) {
    print('Syötä numero, tyhjä lopettaa.');
    var numero = stdin.readLineSync();
    if (numero == '') {
      break;
    }
    print('Syötä numeron $numero omistaja.');
    var omistaja = stdin.readLineSync();

    numerot[numero] = omistaja;
  }

  return numerot;
}
Sori, multipaskaan tässä palaverin päälle, kun ei kosketa just itteä kauheasti, eli ei jouda kirjoittamaan kovin pitkästi, mutta tässä olis olennaista ymmärtää ekana tuo tietorakenne (sanakirja / dict). Joka on siis, menemättä kauheasti nyt detaljeihin, tietorakenne, jonne voit tallentaa avain-arvopareja ja josta arvojen kysyminen onnistuu sen jälkeen mukavasti tuon avaimen avulla.

Sulla on tuossa lukufunktiossa malli, miten tietorakenteeseen syötetään uusi arvo ja sun pitäs tuota soveltaen toteuttaa funktio, joka lukee sanakirjasta arvon, kun avain tiedetään.

Koodi:
numerot[numero] = omistaja;

Ekana siis varmaan kannattaa miettiä, että miten edellistä soveltaen saat kysyttyä tuosta tietorakenteesta arvon, kun tiedät avaimen.

Pistän ny spoileriin, kun en oo varma sotkinko vaan edellisellä, mutta siis tuoltahan saa kysytyksi arvon ihan yhtä yksinkertaisesti kuin sijoitus eli:

Koodi:
var omistaja = "Pentti";
var numero = "05012345";
numerot[numero] = omistaja;

# Nyt jos kysytään tietorakentesta numerot["05012345"], niin kysely palauttaa arvoksi "Pentti"
# Ei siis tämän monimutkaisempi asia, jos sotkin tuossa edellä.


Sen jälkeen vaan teet aika vastaavan funktion kuin tuossa mallissa, jossa kysyt käyttäjältä numeroa, tyhjän syöttäminen katkaisee loopin, ja jos numero on annettu, niin luet sen muuttujaan ja kysyt sillä numerolla tietorakenteesta numeroa vastaavaa arvoa ja muotoilet numeron ja saadun arvon perusteella halutun tulostuksen.

muoksista. lisäpähkinäksi tai testattavaksi: mitä tapahtuu, jos syötät luettaessa tietorakenteeseen kaksi arvoa samalla avaimella?
 
Viimeksi muokattu:
Tässä kohtaa kyllä jo tekisi mieli luovuttaa, tuntuu menevän niin monimutkaiseksi. Vai onko jotain hyviä suomenkielisiä opetuksia missä tätä aihetta opetettaisiin perusteellisemmin tai selkeämmin (tämä on Fitechin kurssi)? Edellisestä koodista: miksi koodissa on "print('Syötä numeron $numero omistaja.');" jos sitä ei kuitenkaan tarvitse kysyä?
 
Tässä kohtaa kyllä jo tekisi mieli luovuttaa, tuntuu menevän niin monimutkaiseksi. Vai onko jotain hyviä suomenkielisiä opetuksia missä tätä aihetta opetettaisiin perusteellisemmin tai selkeämmin (tämä on Fitechin kurssi)? Edellisestä koodista: miksi koodissa on "print('Syötä numeron $numero omistaja.');" jos sitä ei kuitenkaan tarvitse kysyä?
Koodi:
  while (true) {
    print('Syötä numero, tyhjä lopettaa.');
    # täällä luetaan käyttäjältä jokin numero muuttujaan nimeltä "numero" 
    # (ja muuttuja "numero" on käytössä / näkyvissä vain tässä lueNumerot -funktiossa)
    var numero = stdin.readLineSync();
    if (numero == '') {
      break;
    }
    # täällä, lähinnä tulostuksen selventämiseksi, viitataan edellä luettuun muuttujaan "numero" kertomaan mille numerolle halutaan kysyä omistajaa
    print('Syötä numeron $numero omistaja.');
    var omistaja = stdin.readLineSync();

    numerot[numero] = omistaja;
  }
Eli tuossa lukufunktiossa vaan kysytään käyttäjältä ensin numeroita ja niiden omistajia ja sen perusteella täytetään em. tietorakennetta. Tuo tietorakenne on tosiaan kokoelma avain-arvopareja, niin ensin halutaan kysyä avain (= numero) ja sen jälkeen avainta vastaava arvo (= omistaja), että tietorakenteeseen saadaan jotain lisätyksi. En osaa valitettavasti tän enempää rautalangasta selittää :)
 
Viimeksi muokattu:
Tuntuu että nyt on ohjelmoinnin perusteet käyttäjällä @maika vielä sellaisella tasolla että löytyisiköhän jostain materiaalia jota lukemalla voisi lähteä ihan alusta alkaen? Itselleni ei dart ole ihan tutuimpia, eikä netin opetusmateriaalitkaan hanskassa, mutta ehkä joku osaisi neuvoa jonkun alustan hänelle että nämä yksinkertaisemmat tehtävät lähtisivät helpommin aukeamaan?

EDIT:
Huomasin tämän vasta nyt.
Tässä kohtaa kyllä jo tekisi mieli luovuttaa, tuntuu menevän niin monimutkaiseksi. Vai onko jotain hyviä suomenkielisiä opetuksia missä tätä aihetta opetettaisiin perusteellisemmin tai selkeämmin (tämä on Fitechin kurssi)? Edellisestä koodista: miksi koodissa on "print('Syötä numeron $numero omistaja.');" jos sitä ei kuitenkaan tarvitse kysyä?
Ongelma on sinänsä yksinkertainen ratkoa, mutta ohjelmoinnissa on hyvin monta käsitettä jotka olisi hyvä olla tiedossa ennen kuin ongelmanratkonta alkaa sujumaan. Niitä perusteita olisi hyvä nyt opetella, muuten tulee seinä vastaan aika usein.

Jokainen etenee omalla tavallaan. Yhdelle on kiva ettei tarvitse heti lukea paljon teoriaa ja sitten tökkiessä kaivetaan tietoa, kun taas toisen mielestä on kiva lukea ensin ja tehdä sitten sujuvammin kun teoriasta on parempi kuva.
 
Viimeksi muokattu:
tämä on Fitechin kurssi

Mikä kurssi kyseessä? Ehkä tuo ei ole paras mahdollinen alkeiden opettamiseen? Hyvässä peruskurssissa on varmaan tehtävien lisäksi opetusmateriaali, jossa käydään asiat läpi. Eikö tuossa ole?

Olisiko tämä parempi:


Kielenä Python, joka on ehkä vähän yleisempi kieli kuin käyttämäsi Dart.
 
Niin, onko kielen pakko olla @maika lle Dartia? MOOC:in matskut on minusta olleet oikeasti hyviä ja riittävän kattavasti selitettyjä. En jouda googlaan onko Dartille ohjelmoinnin peruskurssia, mutta muille kielille on ja nää alkuaskeleet voi ottaa melkein millä vaan kielellä, ainakin esim. Pythonilla, jossa ihan vastaava dict-tietorakenne.

muoksista. ja joo, pitäähän nää asiat olla matskuissa selitettyinä, ennen kuin voi koodailla ja mielellään jotain fiksuja esimerkkejä, joista voi lähteä sit soveltamaan.
 
Niin, en tiedä tarvitseeko olla Dartia, kunhan aloin kokeilemaan oppisiko jotain koodausta :) ja löytyi tämmöinen kurssi. Mutta näin pitkälle jo päässyt tällä kurssilla (Fitech101 digi & data), niin ärsyttäisi lopettaa kesken. Nämä viimeiset osiot, lista ja sanakirja, on olleet vaikeimmat ja tarvitsee selvästikin vielä opetella. Olen kyllä tehnyt muistiinpanoja kokoajan itselleni vihkoon ja vielä tekstinkäsittelyohjelmaan.
 
Niin, en tiedä tarvitseeko olla Dartia, kunhan aloin kokeilemaan oppisiko jotain koodausta :) ja löytyi tämmöinen kurssi. Mutta näin pitkälle jo päässyt tällä kurssilla (Fitech101 digi & data), niin ärsyttäisi lopettaa kesken. Nämä viimeiset osiot, lista ja sanakirja, on olleet vaikeimmat ja tarvitsee selvästikin vielä opetella. Olen kyllä tehnyt muistiinpanoja kokoajan itselleni vihkoon ja vielä tekstinkäsittelyohjelmaan.
Ei ne opitut asiat hukkaan mene, vaikka vaihtaisitkin tuohon Moociin ja Pythoniin. Ihan pikkaisen eroa syntaksissa, mutta kaikki perusasiat on kuitenkin ihan samaa ja noissa Moocin matskuissa on yleensä selitetty asiat oikeasti sen verran hyvin, että niiden perusteella pystyy ratkomaan tehtävät.

Kökkö hakata päätä seinään, jos ei ole riittävästi tietoa eikä tavallaan mitään eväitä lähteä ratkaisemaan jotain asiaa. Se ei oo oppimisen kannalta oikein kiva ja jää hommat monesti kesken, jos matskut liian hankalia tai huonosti ohjeistettuja.
 
Olen harrastuksena joskus kotisivuja värkkäillyt ja koodeja testaillut, eli html ja css on vähän tuttua, mutta siitäkin on jo aikaa. Jos niistä aiheista löytyisi kurssia niin saa vinkata. Mutta varmaan tästäkin hyötyä on.
 
Niin, en tiedä tarvitseeko olla Dartia, kunhan aloin kokeilemaan oppisiko jotain koodausta :) ja löytyi tämmöinen kurssi. Mutta näin pitkälle jo päässyt tällä kurssilla (Fitech101 digi & data), niin ärsyttäisi lopettaa kesken. Nämä viimeiset osiot, lista ja sanakirja, on olleet vaikeimmat ja tarvitsee selvästikin vielä opetella. Olen kyllä tehnyt muistiinpanoja kokoajan itselleni vihkoon ja vielä tekstinkäsittelyohjelmaan.
Ihan asiallisilta näytti nuo materiaalit, mitä kurkkasin. Luitko kaikki aikaisemmat osat ja teit tehtävät itse ajatellen, että se aikaisempi materiaali esim. muuttujista oli sisäistetty?

Lähinnä siis sillä, ettei nuo vastaavat perusasiat välttämättä tuon paremmin ole selitetty muissakaan oppimateriaaleissa ja tarvis varmaan sit vähän tarkempaa tietoa, että mikä noissa jutuissa ei aukea, että vois jeesata (mille ehkä vois avata sit oman langan, jos vielä tarvista tuon materiaalin tulkkaamiselle).
 
Miten saadaan Regexillä etsittyä kaksi riviä joista ensimmäinen rivi sisältää tietyn tekstin (vaikka "makkispekkis" tai "Pena on kone") ja seuraava rivi on tyhjä?
 
Miten saadaan Regexillä etsittyä kaksi riviä joista ensimmäinen rivi sisältää tietyn tekstin (vaikka "makkispekkis" tai "Pena on kone") ja seuraava rivi on tyhjä?

Riippuen käytetystä regex-variantista ja syötöstä voi olla niinkin yksinkertaista kuin esim. Pena on kone.*\n$ mutta koska regexpistä kyse niin asioilla on taipumus olla monimutkaisempia miltä äkkiseltään näyttää.

Kannattanee kokeilla vaikkapa regex101: build, test, and debug regex
 
Miten saadaan Regexillä etsittyä kaksi riviä joista ensimmäinen rivi sisältää tietyn tekstin (vaikka "makkispekkis" tai "Pena on kone") ja seuraava rivi on tyhjä?
Varmaan joku regex-jumala korjaa, mutta oisko tuo suunnilleen:

Koodi:
Pena on kone(\r\n|\r|\n)^\s*$

Tuossa on tuota ylimääräistä veivuuta eri ympäristöjen rivinvaihtojen kanssa.

muoks. juurikin kyseisellä sivulla testailtuna :D
 
Tarkennetaan sen verran, että käytössä on Edgen lisäosa nimeltä "Find and replace" ja tarkoituksena sen avulla saada poistettua tietyt tekstirivit ja sitä seuraavat tyhjät rivit. Sain luotua ilman Regexiä säännön jolla saadaan tekstirivi pois, mutta sen alla olevan rivin poisto pitäisi saada mukaan. Tämä tukee jotain Regexiä.
Ja on työkone mihin ei ulkopuolisia softia voi asennella, joten pitää koettaa tällaisen selainlaajennuksen avulla.
 
^ no jos sulla on windows kone ja tuo käsiteltävä kama jossain tiedostossa, niin mitä joku windowsin notepad sanoo, jos laitat etsittäväksi merkkijonoksi tyyliin "etsittävä teksti\r\n" ja korvattavaksi tyhjää?

Liekö joku parempi ketjukin ehkä tälle, jos enemmän jotain windows-työkaluspesifiä kuin ohjelmointiongelmaa..
 

Uusimmat viestit

Statistiikka

Viestiketjut
253 918
Viestejä
4 413 370
Jäsenet
73 268
Uusin jäsen
HassuHannu

Hinta.fi

Back
Ylös Bottom