Pieniä kysymyksiä ohjelmoinnista

Viestiketju alueella 'Ohjelmointi' , aloittaja kivibot, 27.12.2011.

NOSTOJA MUROPAKETIN SISÄLLÖSTÄ
  1. ****

    Rekisteröitynyt:
    28.01.2003
    Viestejä:
    578
    Miksi tuossa google sheets koodissa toimii vain ylempi koodi, eli E sarakkeen, mutta ei F sarakkeen "out of range" poisto?

    Koodi:
       var data = sheet.getRange('E:E').getDisplayValues(); //Poistaa  E sarakkeen luvut alle -40 ja yli 40
        var range = []; data.forEach(
          function(e, i){
          if (e[0] <= -40.00 || e[0] >= 40.00) range.push("E" + (i + 1));
          });
        sheet.getRangeList(range).clearContent();
     
      var data = sheet.getRange('F:F').getDisplayValues();  //Poistaa  F sarakkeen luvut alle -40 ja yli 40
        var range = []; data.forEach(
          function(e, i){
          if (e[0] <= -40.00 || e[0] >= 40.00) range.push("F" + (i + 1));
          });
        sheet.getRangeList(range).clearContent(); 
     
  2. Photiou

    Rekisteröitynyt:
    23.11.2005
    Viestejä:
    818
    Veikataan koodia lukematta ja API:in tutustumatta, että E sarakkeen poiston jälkeen F saraketta ei ole. Ts. poista ensin F ja sitten E tai kaksi kertaa E.
     
    Viimeksi muokattu: 15.09.2019
  3. ****

    Rekisteröitynyt:
    28.01.2003
    Viestejä:
    578
    Koodin pitäisi poistaa E ja F sarakkeelta lämpötilat jotka eivät ole -40 - +40 välissä, tämä toimii oikein sillä sarakkeella joka on koodissa ylempänä, jos ensin on E niin siinä poisto toimii, mutta ei F sarakkeella. Jos F on ensin niin sitten toimii siinä mutta ei E sarakkeella.
     
  4. jushi

    Rekisteröitynyt:
    18.01.2002
    Viestejä:
    85
    Harjoittelen tässä javascriptiä ja nyt on ajatus jotenkin ihan täysin jumissa, ehkä ajattelen liian monimutkaisesti tai liian suoraviivaisesti.

    Tuossahan on viestit-taulu, jossa on jo yksi viesti oletuksena tallennettu. lisaaViesti-funktiossa pitäisi varmaan push-metodilla puskea uusi viesti tuohon tauluun, mutta jostain syystä en nyt sitä saa toimimaan, ehkä joku pilkkuvirhe tai logiikkavirhe, joten voisin ostaa vokaalin.

    Äkkiä voisi ajatella, että ihan viestit.push(); ja sulkujen sisään oikeat asiat, mutta joko tuo on ihan väärin tai sulkujen sisään laitan väärällä tavalla asiat.
    esim. viestit.push(nimi,otsikko,viesti); mutta jos/kun tuo nimi: on indeksin nimi niin miten se tuohon sisällytetään?


    Koodi:
    class Viestiseina {
        viestit = [
            { nimi: 'nakke', otsikko: 'viestin otsikko', viesti: 'tässä on tekstiä' }
        ];
    
        lisaaViesti(nimi, otsikko, viesti) {
            //Toteuta funktio, että se lisää viestit-tauluun uuden viestin annetuilla parametreilla
            
    
        }
    }
    
    
     
  5. Allu404

    Rekisteröitynyt:
    05.04.2019
    Viestejä:
    5
    Elikkä kielenä ois python ja jostaki syystä tuo 1 on invalid syntax nii mite korjaan sen

    Koodi:
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    
    i = 0
    
    koodi = ""
    
    koodi = input("Syötä Kahoot-pelin koodi:  ")
    botit = input("Kuinka monta pelaajaa haluat:  ")
    nimet = input("Minkä nimisen pelaaja 1 haluat:  ")
    
    if int(botit) > 1<<<<<<<<<<<<<<<<<<Tämä on se
        joo = input("Entä toinen pelaaja:  ")
        print("Ole hyvä!")
    else:
        print("Ole hyvä!")
    while i < int(botit):
        selain = webdriver.Chrome()
        selain.get("https://kahoot.it")
        kirjoitus = selain.find_element_by_id("game-input")
        kirjoitus.send_keys(koodi)
        kirjoitus.send_keys(Keys.RETURN)
        time.sleep(1)
        nimi = selain.find_element_by_id("nickname")
        nimi.send_keys(nimet)
        nimi.send_keys(Keys.RETURN)
     
  6. rauttiz

    Rekisteröitynyt:
    09.01.2009
    Viestejä:
    39
    Puuttuuko kaksoispiste 1:n jälkeen? Sillä saa ainakin aikaan "SyntaxError: invalid syntax" virheen tuossa kohtaa.
     
  7. hejony

    Rekisteröitynyt:
    25.01.2020
    Viestejä:
    3
    Opiskeluvaiheessa ollaan, ja nyt useampi tunti mennyt pähkäillessä yhtä simppeliä ongelmaa, alkaa pää hajota. Alla olevan koodin pitäisi tulostaa vastaukseksi 3.5, oma koodinpätkäni tulostaa kuitenkin 3.0. Oletan että vika on siinä etten ole saanut muutettua yhtäkään parametria doubleksi, mutta vaikka olen yrittänyt sijoitella tuota muutosta moneen eri paikkaan, ei ohjelma tunnu sitä huomioivan. Apuja?

    public class LukujenKeskiarvo {

    // toteuta tähän uudelleen aiemmin tekemäsi summametodi
    public static int summa(int luku1, int luku2, int luku3, int luku4) {
    // kirjoita koodia tähän
    double luku = luku1;
    luku = luku1;
    return luku1 + luku2 + luku3 + luku4;
    }

    public static double keskiarvo(int luku1, int luku2, int luku3, int luku4) {
    double luku = luku1;
    double keskiarvo = summa (luku1, luku2, luku3, luku4) / 4;
    return keskiarvo;
    }

    public static void main(String[] args) {
    double vastaus = keskiarvo(4, 3, 6, 1);
    System.out.println("Keskiarvo: " + vastaus);
    }
    }
     
  8. telcoM

    Rekisteröitynyt:
    27.08.2015
    Viestejä:
    769
    Summa-metodissa määrittelet double-tyyppisen muuttujan nimeltä "luku" johon tallennat luku1:n arvon, jopa kahteen kertaan. Mutta et kuitenkaan käytä muuttujaa "luku" yhtään mihinkään, joten siellä sillä ei ole mitään vaikutusta. Ja koska "luku"-muuttuja on määritelty metodin sisällä, se katoaa metodista poistuttaessa, eli sillä ei ole mitään vaikutusta metodin ulkopuolellakaan.

    Varsinainen virhe on keskiarvo-metodissa. Int-tyyppisen parametrin "luku1" arvon kopioiminen double-tyyppiseen "luku"-muuttujaan ei vaikuta yhtään mitään luku1:een. Koska summa-metodi on määritelty ottamaan vastaan neljä int-tyyppistä parametria, et voi mitenkään syöttää sille double-tyyppistä arvoa, ja vaikka voisitkin, summa-metodi on kirjoitettu joka tapauksessa palauttamaan kokonaislukuarvon (int-tyypin).

    Sitten kun lasket keskiarvoa, muuttuja "keskiarvo" on aivan oikein määritelty double-tyyppiseksi, mutta itse laskutoimituksessa on vain kokonaislukuja (summa-metodin palauttama int-tyyppinen arvo, sekä vakio jakaja 4). Tästä seuraa että jakolasku tehdään tyhmästi kokonaisluvuilla ja vasta tallennettaessa tulosta keskiarvo-muuttujaan se muunnetaan double-tyyppiseksi - mutta silloin vahinko on jo tapahtunut.

    Jotenkin siis pitäisi saada tuohon keskiarvo-metodin laskutoimitukseen mukaan edes yksi ei-kokonaisluku, jotta kone älyäisi suorittaa laskutoimituksen liukuluvuilla kokonaislukujen sijasta. Ainoa laskutoimituksen osa jonka tyyppiä ei ole aikaisemmassa koodissa naulattu kiinni on tuo vakioarvoinen jakaja. Voisiko sen esittää jotenkin niin että se olisi ehdottomasti double-tyyppinen vakioarvo?
     
    Viimeksi muokattu: 25.01.2020
  9. hejony

    Rekisteröitynyt:
    25.01.2020
    Viestejä:
    3
    Suuret kiitokset. Loin tuohon keskiarvo-metodiin
    double jakaja = 4.0;
    ja tällä saatiin oikea tulos ja tehtävä meni läpi. Kiitos!
     
  10. telcoM

    Rekisteröitynyt:
    27.08.2015
    Viestejä:
    769
    Noinkin se onnistuu. Mutta olisit voinut myös tehdä yksinkertaisesti näin:
    Koodi:
    double keskiarvo = summa (luku1, luku2, luku3, luku4) / 4.0;
    
    Eli kun jakaja kirjoitetaan desimaalipisteen kanssa, se on silloin automaattisesti liukuluku, ja jos laskutoimituksessa on mukana yksikin liukuluku, silloin muut kokonaisluvut muutetaan automaattisesti liukuluvuiksi ennen laskutoimitusta.

    Riippuen siitä mitä ohjelmointikieltä tarkkaan ottaen käytät, saattaa olla useita tapoja ilmaista vakioarvoja niin että tyyppi ilmenee itse vakioarvon kirjoitusasusta. Esimerkiksi näin:

    * numero 4 kokonaislukuna = 4
    * numero 4 yksinkertaisen tarkkuuden liukulukuna = 4.0 (C, C++) tai 4.0f (C, C++, Java)
    * numero 4 kaksinkertaisen tarkkuuden liukulukuna = 4.0L (C, C++) tai 4.0 (Java) tai 4.0d (Java)

    Huomaa että jos vakion tyyppiä ei ole määritetty desimaaliluvun perään liitetyllä kirjaintunnuksella, eri kielet voivat tehdä erilaisen oletuksen vakion tyypistä. Siksi on hyvä tapa opetella laittamaan desimaalilukuvakioiden perään aina halutun tyypin kirjaintunnus jos vain käytettävä kieli sen sallii, niin ei tule vahingossa käskytettyä konetta laskemaan heikommalla tarkkuudella ellet erityisesti sitä halua.

    Heikomman tarkkuuden liukulukutyypin käyttö voisi tulla kysymykseen jossain sulautetussa järjestelmässä jossa on todella pienitehoinen prosessori, tai jos on tehtävänä mahdollisimman nopeasti laskutoimituksia valtavalle määrälle liukulukuja joiden arvot tiedetään ennalta olevan sellaisella välillä että tarkkuudesta ei tule ongelmaa. PC-prosessoreissa on ensimmäisistä Pentiumeista lähtien ollut takuuvarmasti aina liukulukulaskenta toteutettuna rautatasolla, joten liukulukujen tarkkuudessa pihistely ei tämän tason ohjelmoinnissa ole missään nimessä vaivan arvoista jos koodia kirjoitetaan PC:lle.

    (Sitten jos olet tekemässä reaaliaikaisesti laskettavaa trigonometriaa vaikka 3D-animaatiota varten, grafiikkakoodareilla on iso kasa niksejä, approksimaatioita ja muita oikoteitä joilla vedetään mutkat suoriksi. Mutta sen aika on sitten kun perusteet on ensin tukevasti hallussa...)
     
  11. hejony

    Rekisteröitynyt:
    25.01.2020
    Viestejä:
    3
    Seuraava ongelma, josta en tunnu pääsevän yli. Löytyisikö tähän apuja?

    Eli syötteillä "aleksi" ja "tappara" sekä "elina" ja "kissa" pitäisi tulla printti "Olet kirjautunut järjestelmään", muilla vaihtoehdoilla "Virheellinen tunnus tai salasana!". Toimii muuten, mutta nyt tulostaa oikeillakin yhdistelmillä loppuun tuon "Virheellinen...". Eli elsen kohdalla jokin ongelma?


    import java.util.Scanner;

    public class Kayttajatunnukset {

    public static void main(String[] args) {
    Scanner lukija = new Scanner(System.in);
    System.out.println("Anna tunnus:");
    String tunnus = lukija.nextLine();
    System.out.println("Anna salasana:");
    String salasana = lukija.nextLine();

    if (tunnus.equals("aleksi") && salasana.equals("tappara") ) {
    System.out.println("Olet kirjautunut järjestelmään");
    }
    if (tunnus.equals("elina") && salasana.equals("kissa")) {
    System.out.println("Olet kirjautunut järjestelmään");
    }

    else {
    System.out.println("Virheellinen tunnus tai salasana!");
    }
    }
    }
     
  12. rauttiz

    Rekisteröitynyt:
    09.01.2009
    Viestejä:
    39
    Nyt tuo else on vaihtoehtona vain jälkimmäiselle if-lauseelle. Se suoritetaan myös silloin, kun ensimmäinen if-lause suoritetaan. Helpoin tuo on korjata muuttamalla jälkimmäinen if-lause else if -lauseeksi. Katso esim. sivulta https://www.w3schools.com/java/java_conditions.asp kohta The else if Statement.
     
  13. leecher

    Rekisteröitynyt:
    29.06.2008
    Viestejä:
    85
    Google sheets ongelma. Tein taulukon jossa lasketaan yhteen aikoja min:sek esim. 1 min 14 s. Noista sitten keskiarvo. Missä muodossa nuo pitää syöttää soluun ja missä muodossa solun pitää olla, että saisi kaavat toimimaan?? Nyt muodossa min ja sek.
    Average kaava herjaa nollalla jakamisesta??
     

Jaa tämä sivu

Alibi
Anna
Deko
Dome
Erä
Hymy
Kaksplus
Kippari
Kotilääkäri
Kotiliesi
Koululainen
Ruoka.fi
Parnasso
Seura
Suomen Kuvalehti
TM Rakennusmaailma
Tekniikan Maailma
Vauhdin Maailma
Golfpiste
Vene
Nettiauto
Ampparit
Plaza
Muropaketti