Esimerkki: Syötettyjen lukujen summaaminen

Yksittäinen merkki näppäimistöltä syötetään key-komennolla. Kun luomme String-tyyppisen muuttujan: kirjoita, niin laskurilla: kirjoita = kirjoita + key; voimme lisätä merkkejä tähän laskuriin, jolloin saamme merkkijonon. Konversiolla int(); voimme tämän merkkijonon taas muuttaa kokonaisluvuksi, joka voidaan helposti taas summata omaan summa laskuriin. Tehdään ohjelma, joka summaa näppäimistöltä syötettyjä lukuja yhteen. Huomaa, että tämä esimerkki toimii vain PC-koneilla.

SANALLINEN ALGORITMI
  1. Määrittele globaali merkkijonomuuttuja: kirjoita ja sijoita siihen arvo "" (tyhjä).
  2. Määrittele globaali merkkijonomuuttuja: kirjoitettu ja sijoita siihen arvo "" (tyhjä).
  3. Määrittele globaali kokonaislukumuuttuja summa ja sijoita siihen alkuarvo 0.
  4. Määrittele globaali kokonaislukumuuttuja laskuri ja anna sille alkuarvo 1.
  5. Aseta ikkunan kooksi 600 px vaakaan ja 200 px pystyyn.
  6. Aseta täyttöväriksi musta.
  7. Aseta tekstin kooksi 30.
  8. Tyhjennä tausta ja väritä se valkoiseksi.
  9. Tulosta teksti: "Anna "+laskuri+". luku" paikkaan (50,50).
  10. Tulosta kirjoita-muuttujan nykyinen arvo paikkaan (60+edellisen tekstin leveys,50).
  11. Tulosta summa-muuttujan nykyinen arvo paikkaan (50,100).
  12. Kun näppäintä on painettu, niin aloita uusi lohko (void keyPressed).
  13. Jos painetaan Enter, niin
    1. Sijoita muuttujalle: kirjoitettu muuttujan: kirjoita sisältö.
    2. Tyhjennä muuttujan: kirjoita sisältö.
    3. Lisää summa muuttujalle syötettyjen lukujen summa. Syötetyt luvut ovat muuttujassa: kirjoitettu, joka voidaan muuttaa konversiolla int() kokonaisluvuksi.
    4. Kasvata muuttujaa: laskuri yhdellä.
  14. Muutoin (jos ei paineta Enteriä), niin
    Lisää näppäimen painallus merkkijonomuuttujalle: kirjoita.

// Ohjelman tehnyt e-Oppi Oy
// 30.9.2017
String kirjoita =""; // Uusi teksti
String kirjoitettu=""; // Vanha teksti
int summa = 0; // Lukujen summa
int laskuri = 1; // Syötettyjen lukujen määrä

void setup () {
size(600,200); // ikkunan koko
fill(0); // Musta täyttöväri
textSize(30); // Tekstin koko 30
}

void draw () {
background(255); // Tyhjennä tausta
text("Anna "+laskuri+". luku:",50,50); // Kysy luku
text(kirjoita,60+textWidth("Anna"+laskuri+". luku:"),50);
// Tulosta nykyinen luku
text("Lukujen summa on: "+summa,50,100);
// Tulosta lukujen summa
}

void keyPressed() {
if (key == '\n') { // Jos painetaan Enter
kirjoitettu = kirjoita;
// Siirrä nykyinen merkkijono vanhaan merkkijonoon
kirjoita =""; // Nollaa nykyinen merkkijono
summa = summa+int(kirjoitettu);
// Laske syötettyjen lukujen summa.
// int()-komento muuttaa merkit luvuksi.
laskuri = laskuri + 1; // Kasvata laskuria yhdellä
} else { // Muutoin kasvata merkkijonoa
kirjoita = kirjoita+key;
// Lisää yksittäinen syötetty merkki merkkijonoon
}
}


Aluksi ohjelma kysyy lukua. Napsauta aluksi hiirellä ikkunaa ja sitten syötä haluamasi luku. Esimerkiksi tässä luvuksi on syötetty viisi.



Kun painat Enteriä, niin syötetty luku siirtyy summa muuttujalle. Voit nyt syöttää toisen luvun. Laskuri-muuttujasta näet sen, että monennenko luvun olet nyt syöttämässä. Anna toinen luku. Esimerkiksi tässä toinen luku on seitsemän.



Kun painat Enteriä, niin summa muuttuja kasvaa viidellä ja laskuri muuttuja yhdellä. Voit jatkaa lukujen syöttämistä. Kokeile myös syöttää isompia lukuja.




Tehdään sama ohjelma vertailun vuoksi käyttäen Javan syöttökenttiä.


// Ohjelman tehnyt e-Oppi Oy
// 1.1.2018
import static javax.swing.JOptionPane.*;
int summa = 0; // Lukujen summa
int laskuri = 1; // Syötettyjen lukujen määrä

void setup () {
size(600,200); // ikkunan koko
fill(0); // Musta täyttöväri
textSize(30); // Tekstin koko 30
background(255); // Tyhjennä tausta
}
void draw () {
int luku; // Määritellään luku muuttuja
String vastaus1 = showInputDialog(null,"Anna "+laskuri+" luku"); // Kysy luku
if (vastaus1 != null) { // null=cancel
luku= int(vastaus1); // Konversio vain jos painettu OK (ei null)
summa = summa+luku; // Summaa luvut
}
int vastaus2= showConfirmDialog(null, "Lopeta lukujen syöttäminen?"); // 0=yes, 1=no, 2=cancel
if (vastaus2 == 0) { // Jos vastaus on yes eli 0, niin
text("Olet syöttänyt: "+laskuri+" kpl lukuja",50,50);
text("Lukujen summa on: "+summa,50,100);
noLoop(); // Lopeta void draw ()-lohkon toisto
} else { // Kaikissa muissa tapauksissa
laskuri++; // kasvata laskuria
}
}


Tähän on lisätty kysymys, että syötetäänkö lisää lukuja. Kun lukuja ei enää syötetä, niin tulostetaan syötettyjen lukujen määrä ja summa.