Pieniä kysymyksiä ohjelmoinnista

Liittynyt
17.01.2018
Viestejä
2 078
Tässä olikin taas hyvä esimerkki miksi sulkeita olisi hyvä käyttää aina niin ei tule vastaavia ongelmia
 
Liittynyt
01.01.2018
Viestejä
1 125
Miten saisin kätevästi tyypit muuttujasta kuten

JavaScript:
Let variable = {}

variable.something = 566

Typeof variable // ei toimi vaan tyyppi on {}
 
Liittynyt
19.10.2016
Viestejä
3 426
Miten saisin kätevästi tyypit muuttujasta kuten

JavaScript:
Let variable = {}

variable.something = 566

Typeof variable // ei toimi vaan tyyppi on {}
Tuo variable tuossa on objekti, siellä voi siis olla useita erityyppisiä arvoja (jotka voinee halutessaan käydä läpi)?

JavaScript:
console.log(typeof {});

let variable = {}
variable.something = 566
console.log(typeof variable);

console.log(typeof variable.something);

-->

> "object"
> "object"
> "number"
 
Liittynyt
01.01.2018
Viestejä
1 125
Tuo variable tuossa on objekti, siellä voi siis olla useita erityyppisiä arvoja (jotka voinee halutessaan käydä läpi)?

JavaScript:
console.log(typeof {});

let variable = {}
variable.something = 566
console.log(typeof variable);

console.log(typeof variable.something);

-->

> "object"
> "object"
> "number"
Tai siis haluaisin että typescriptin autocomplete toimisi noiden operaatioiden jälkeen.

Esim. variable. Ehdottaa tuon something sen jälkeen kun se on aikaisemmin määritelty numeroksi.

EDIT: How to dynamically assign properties to an object in TypeScript - LogRocket Blog

Tämä tuntuu vastaavaan ongelmaani.
 
Viimeksi muokattu:
Liittynyt
17.10.2016
Viestejä
14 664
Esim. variable. Ehdottaa tuon something sen jälkeen kun se on aikaisemmin määritelty numeroksi.
Kerrotko vähän tarkemmin, mitä teet.

Normaalisti sun pitää määritellä muuttujan variable tyyppi. Sitten kun sen olet määritellyt, niin autocompletion toimii. Esim:

JavaScript:
const user: { name: string; age?: number } = { name: 'Jarppi' }
user.age = 65 // Autocomplete toimii

const user2 = { name: 'Jarppi' }
user2.name = 'Pete' // Autocomplete toimii yhä. Objektiliteraali edellisellä rivillä määritteli tyypin.
Tuossa TS tietää, mitä propertyjä userilla on ja osaa niitä tarjota. Sä taas loit muuttujan, jolla ei ole propertyjä, vaan on tyhjä objekti. TS herjaa jos yrität mitään muuttaa.

PS. Älä käytä let-avinsanaa. Vaan const on tuossa oikea. Se objekti pysyy vakiona vaikka muutat sen propertyjä.
 
Liittynyt
31.12.2016
Viestejä
443
Tai siis haluaisin että typescriptin autocomplete toimisi noiden operaatioiden jälkeen.

Esim. variable. Ehdottaa tuon something sen jälkeen kun se on aikaisemmin määritelty numeroksi.

EDIT: How to dynamically assign properties to an object in TypeScript - LogRocket Blog

Tämä tuntuu vastaavaan ongelmaani.
Itse käytän tätä interface generoimiseen, kopioi vaan objectin. Instantly parse JSON in any language | quicktype Kuulemma ChatGPT toimii myös hyvin.
 
Liittynyt
01.01.2018
Viestejä
1 125
Kerrotko vähän tarkemmin, mitä teet.

Normaalisti sun pitää määritellä muuttujan variable tyyppi. Sitten kun sen olet määritellyt, niin autocompletion toimii. Esim:

JavaScript:
const user: { name: string; age?: number } = { name: 'Jarppi' }
user.age = 65 // Autocomplete toimii

const user2 = { name: 'Jarppi' }
user2.name = 'Pete' // Autocomplete toimii yhä. Objektiliteraali edellisellä rivillä määritteli tyypin.
Tuossa TS tietää, mitä propertyjä userilla on ja osaa niitä tarjota. Sä taas loit muuttujan, jolla ei ole propertyjä, vaan on tyhjä objekti. TS herjaa jos yrität mitään muuttaa.

PS. Älä käytä let-avinsanaa. Vaan const on tuossa oikea. Se objekti pysyy vakiona vaikka muutat sen propertyjä.
JavaScript:
const automatic = {};

  questions.forEach((e) => {
    if (e.questionType === "yesOrNo") {
      const yesOrNo = filterSensitive.map((i) => i[e.questionDB]);
      automatic[e.questionDB] = {
        yes: yesOrNo.filter((i) => i === true).length,
        no: yesOrNo.filter((i) => i === false).length,
      };
    } }
Tosiaan tarkoitus on tuossa saada automatic:sta objectin tyypit ulos mielellään inferensillä, koska muuten se on liian työlästä koska noita properteja on vielä enemmän.

Yksi vaihtoehto on tietty laittaa suoraan const automatic = questions.map("koodi").reduce("redusointi koodi jonosta objektiksi). Ongelma tässä on tietty että en tiedä saako typescript noista paljoa sen paremmin kiinni, esim. automatic[e.questionDB], on vain tyyppinä {[key: string] : string} eikä esim. automatic.something.yes

Edit. Letukin vastaus taitaa toimia, en vain aluksi hiffanut että mullahan on valmis json objekti kun tuo koodi on suoritettu. Täytyy kokeilla huomenna.
 
Viimeksi muokattu:

Starglazer

Tukijäsen
Liittynyt
17.10.2016
Viestejä
3 096
SQL. Miten laitetaan where ehto case rakenteelle silloin jos siinä valitaan useita sarakkeita?
Koodi:
select
    id
    , case
        when group = '1'
            then StartDate
            else EndDate
    end as "Date"
from
    Company
where
    date > 1.1.2023??
 
Liittynyt
17.01.2018
Viestejä
2 078
SQL. Miten laitetaan where ehto case rakenteelle silloin jos siinä valitaan useita sarakkeita?
Koodi:
select
    id
    , case
        when group = '1'
            then StartDate
            else EndDate
    end as "Date"
from
    Company
where
    date > 1.1.2023??
Koko case pitää olla ehdossa:
Koodi:
select
    id
    , case
        when group = '1'
            then StartDate
            else EndDate
    end as "Date"
from
    Company
where
   case
        when group = '1'
            then StartDate
            else EndDate
    end > cast('1.1.2023' as date)
tai select from select:
Koodi:
select
  id,
  "Date"
from (
select
    id
    , case
        when group = '1'
            then StartDate
            else EndDate
    end as "Date"
from
    Company
) d
where "Date" > cast('' as date)
Vaihtoehdossa 2 on monissa kannoissa se ongelma että ensin tehdään kysely koko massalle -> tulos "temp" tauluun ja vasta sen jälkeen rivien filtteri. Riippuu optimoijasta ja kannasta.

Vähän offtopic:
Kannattaa myös opetella välttämään yleisimpiä varattuja sanoja kuten tässä Date sarakkeen nimenä. Helpottaa elämää varsinkin jos joskus joutuu käyttämään muita kantoja.
Oletan että StartDate ja EndDate datatyyppi on oikeasti date/datetime/timestamp, silloin kannattaa aina vakioarvo muuttaa oikeaan datatyyppiin eikä antaa kannan tehdä oletusmuunnoksia (esimerkkinä mssql jossa varchar = int vertailussa yritetään yleensä muuttaa varchar -> int eikä toisinpäin).
 

Starglazer

Tukijäsen
Liittynyt
17.10.2016
Viestejä
3 096
Koko case pitää olla ehdossa:
Koodi:
select
    id
    , case
        when group = '1'
            then StartDate
            else EndDate
    end as "Date"
from
    Company
where
   case
        when group = '1'
            then StartDate
            else EndDate
    end > cast('1.1.2023' as date)
tai select from select:
Koodi:
select
  id,
  "Date"
from (
select
    id
    , case
        when group = '1'
            then StartDate
            else EndDate
    end as "Date"
from
    Company
) d
where "Date" > cast('' as date)
Vaihtoehdossa 2 on monissa kannoissa se ongelma että ensin tehdään kysely koko massalle -> tulos "temp" tauluun ja vasta sen jälkeen rivien filtteri. Riippuu optimoijasta ja kannasta.

Vähän offtopic:
Kannattaa myös opetella välttämään yleisimpiä varattuja sanoja kuten tässä Date sarakkeen nimenä. Helpottaa elämää varsinkin jos joskus joutuu käyttämään muita kantoja.
Oletan että StartDate ja EndDate datatyyppi on oikeasti date/datetime/timestamp, silloin kannattaa aina vakioarvo muuttaa oikeaan datatyyppiin eikä antaa kannan tehdä oletusmuunnoksia (esimerkkinä mssql jossa varchar = int vertailussa yritetään yleensä muuttaa varchar -> int eikä toisinpäin).
Kiitos! Kenttien nimet eivät ole todellisia nimiä, keksin esimerkin vuoksi ne.
 
Liittynyt
01.01.2018
Viestejä
1 125
Ilmeisesti SQL:ssä ei saisi mielellään käyttää SELECT * , vaan pitäisi vaan valita kaikki columnit manuaalisesti. Ongelma on että minulla on noin 50 columnia, ja osa on relaatiota joita käytän kuten sukupuolen mukaan valinta. Olen suodattanut arat columnit kuten id:t vain laiskasti spread syntaxilla nodessa ([id ...rest]).

Onko vinkkejä miten kannattaisi toimia? Melkein kaikissa columneissa on myös joku constraint. Postgres tukee json:ia mutta en tiedä saako sinne noita constraintteja properteille, ja miten relaatioiden hanskaaminen niillä sitten onnistuu.
 
Liittynyt
17.01.2018
Viestejä
2 078
Ilmeisesti SQL:ssä ei saisi mielellään käyttää SELECT * , vaan pitäisi vaan valita kaikki columnit manuaalisesti. Ongelma on että minulla on noin 50 columnia, ja osa on relaatiota joita käytän kuten sukupuolen mukaan valinta. Olen suodattanut arat columnit kuten id:t vain laiskasti spread syntaxilla nodessa ([id ...rest]).

Onko vinkkejä miten kannattaisi toimia? Melkein kaikissa columneissa on myös joku constraint. Postgres tukee json:ia mutta en tiedä saako sinne noita constraintteja properteille, ja miten relaatioiden hanskaaminen niillä sitten onnistuu.
Tottakai select * on sallittu.
Mutta jos teet kyselyn jossa on liitetty useita tauluja niin tulee kaikista kaikki eikä se yleensä ole "oikein" tai ainakaan tarpeellista.
Yleensä kannattaa listata selectissä sarakkeet niin saa vain ne jotka tarvitaan (ei siirretä turhaa dataa kannan ja kyselijän välillä) ja joissakin tapauksissa järjestykselläkin voi olla merkitystä.

Kannattaa aloittaa jsonin kanssa vaikka tästä: JSON in PostgreSQL: how to use it right - CYBERTEC
Lyhyesti: älä mieti edes etäisesti että käyttäisit sarakkeessa olevan jsonin sisältöä taulun liittämiseen toiseen vaikka se olisi mahdollista, siitä tulee käytännössä vain ongelmia. Melkein sama hakuehtojen kanssa.
Kaikki liitoksiin käytettävät sarakkeet kannattaa olla perusdatatyyppejä, lyhyempi parempi niin ei tule ongelmia vaikka rivimäärä vähän kasvaisikin.

Json on joissakin tapauksissa ihan kätevä mutta se ei kuulu relaatiokantaan liitosten ja hakuehtojen osalta, ne kannattaa molemmat tehdä perustyypeillä joita ei tarvitse parsia joka kerran käytettäessä.
Relaatiokantaa kannattaa käyttää siten kuin ne on suunniteltu toimimaan parhaiten, eli jos tuleva data on json niin se puretaan ennen kirjoitusta sarakkeiksi ja tallennetaan oikean tyyppisiin sarakkeisiin. Ainoana poikkeuksena esim geojson mutta sekin yleensä muunnetaan kannan omaan geometriatyyppiin. Tai jokin json- data joka tallennetaan ja luetaan/tarvitaan myöhemmin mutta jonka sisältöä ei käytetä rajauksiin tai liitoksiin.
 
Liittynyt
05.03.2023
Viestejä
25
'dart:io';

main() {
print('Syötä yläraja.');
var syote = int.parse(stdin.readLineSync());
for (var i = 0; i <= 3; i++) {
print('$i');
}
}

Hyvää iltaa kaikki osaavat :) Yllä Fitechin tehtävä jolla tulostetaan luvut nollasta kolmeen, kun ylärajaksi syötetään kolme. Minun pitäisi saada tuosta aikaiseksi tulostus jossa luvut olisivat nollasta kahteen kun ylärajaksi tulisi 2 ja jos kirjoitetaan luvuksi - 1 niin ohjelma ei tulosta mitään.
Tämä on ihan alkeita, mutta olen jumahtanut tähän tehtävään enkä löydä ratkaisua.
Saako joku kiinni ajatuksesta mitä tarkoitan? :)
 
Liittynyt
18.10.2016
Viestejä
524
Kieltä tuntematta tarttet tohon loopiin sen user input ylärajan ei kiinteetä 3 a toivottavasti auttaa saamaan ideasta kiinni
 
Liittynyt
16.11.2020
Viestejä
2 588
'dart:io';

main() {
print('Syötä yläraja.');
var syote = int.parse(stdin.readLineSync());
for (var i = 0; i <= 3; i++) {
print('$i');
}
}

Hyvää iltaa kaikki osaavat :) Yllä Fitechin tehtävä jolla tulostetaan luvut nollasta kolmeen, kun ylärajaksi syötetään kolme. Minun pitäisi saada tuosta aikaiseksi tulostus jossa luvut olisivat nollasta kahteen kun ylärajaksi tulisi 2 ja jos kirjoitetaan luvuksi - 1 niin ohjelma ei tulosta mitään.
Tämä on ihan alkeita, mutta olen jumahtanut tähän tehtävään enkä löydä ratkaisua.
Saako joku kiinni ajatuksesta mitä tarkoitan? :)
Tuossahan se oikeastaan edellä tuli, mutta hieman monisanaisemmin, niin kolmonen ja sitä edeltävä vertailuoperaattori tuolla for-luuppirakenteen sisällä kertoo nykyisellään ylärajan, montako kertaa luupin sisällä olevaa rakennetta toistetaan.

Syote-niminen muuttuja on vaan luku, joka luetaan käyttäjältä ja ehkä vielä hyvä ymmärtää, että käytännössä tuossa siis luetaan merkkijonotyyppinen muuttuja käyttäjältä, joka muunnetaan erikseen luvuksi. Ja jos menet antamaan ohjelmaa testatessa syötteeksi kirjaimen tai erikoismerkin, jotka eivät ole kelvollisia lukuja, joita voisi kääntää merkkijonosta luvuksi, niin olettaisin ohjelman kippaavan Dartillakin. Kannattaa varmaan kokeilla tuokin, että millainen virheilmoitus tulee.

Mutta voit siis korvata tuon numero kolmosen em. muuttujalla, jolloin tuon for-luuppirakenteen yläraja tuleekin siitä luvusta, joka ohjelmalle syötetään.

Kannattanee tsekata vielä ajatuksella materiaalit ja mitä niissä sanotaan muuttujista ja toistolausekkeista.
 
Liittynyt
05.03.2023
Viestejä
25
9
Kieltä tuntematta tarttet tohon loopiin sen user input ylärajan ei kiinteetä 3 a toivottavasti auttaa saamaan ideasta kiinni
Tuossahan se oikeastaan edellä tuli, mutta hieman monisanaisemmin, niin kolmonen ja sitä edeltävä vertailuoperaattori tuolla for-luuppirakenteen sisällä kertoo nykyisellään ylärajan, montako kertaa luupin sisällä olevaa rakennetta toistetaan.

Syote-niminen muuttuja on vaan luku, joka luetaan käyttäjältä ja ehkä vielä hyvä ymmärtää, että käytännössä tuossa siis luetaan merkkijonotyyppinen muuttuja käyttäjältä, joka muunnetaan erikseen luvuksi. Ja jos menet antamaan ohjelmaa testatessa syötteeksi kirjaimen tai erikoismerkin, jotka eivät ole kelvollisia lukuja, joita voisi kääntää merkkijonosta luvuksi, niin olettaisin ohjelman kippaavan Dartillakin. Kannattaa varmaan kokeilla tuokin, että millainen virheilmoitus tulee.

Mutta voit siis korvata tuon numero kolmosen em. muuttujalla, jolloin tuon for-luuppirakenteen yläraja tuleekin siitä luvusta, joka ohjelmalle syötetään.

Kannattanee tsekata vielä ajatuksella materiaalit ja mitä niissä sanotaan muuttujista ja toistolausekkeista.

Huh! Onnistui!! Iso kiitos teille! Olin jumahtanut ajattelemaan tuota ihan väärin, ohjeistukset auttoivat ja sain homman ratkeamaan viidessä minuutissa! Kannatti pyytää apua, koska nyt tajuan nämä paremmin jatkossakin :)
 
Liittynyt
18.10.2016
Viestejä
272
Hyvää iltaa kaikki osaavat :) Yllä Fitechin tehtävä jolla tulostetaan luvut nollasta kolmeen, kun ylärajaksi syötetään kolme. Minun pitäisi saada tuosta aikaiseksi tulostus jossa luvut olisivat nollasta kahteen kun ylärajaksi tulisi 2 ja jos kirjoitetaan luvuksi - 1 niin ohjelma ei tulosta mitään.
Tämä on ihan alkeita, mutta olen jumahtanut tähän tehtävään enkä löydä ratkaisua.
Saako joku kiinni ajatuksesta mitä tarkoitan? :)
Päädyin kokeilemaan Dartia elämäni ensimmäistä kertaa (pitänyt jo kauan ottaa Flutter haltuun). Koodistani tuli hieman eri näköistä, joten postaan sen tähän evaluoitavaksi sekä @Dellu että muun raadin toimesta (online Dart compiler -versio):

JavaScript:
import 'dart:io';

void main() {
    print('Syötä yläraja.');

    String syote = stdin.readLineSync() ?? '';
    int ylaraja = int.tryParse(syote) ?? 0;

    for (var i = 0; i <= ylaraja; i++) {
        print('$i');
    }
}
EDIT: Vajosin syvemmälle kaninkoloon, kun alkoi kinostella. Over engineerasin, jotta pääsi testailemaan vähän laajemmaltikin. Nyt näyttäisi tältä:
JavaScript:
import 'dart:io';

void prettyPrint(String msg, [String type = 'none']) {
  if (type == 'info') {
    print('\x1B[32m$msg\x1B[0m');
  } else if (type == 'error') {
    print('\x1B[31m$msg\x1B[0m');
  } else {
    print(msg);
  }
}

String getInput() {
  prettyPrint('Enter limit:');
  String input = stdin.readLineSync() ?? '';
  return input;
}

int getLimitAsInt(String input) {
  int? limit;

  try {
    limit = int.parse(input);
  } on FormatException {
    prettyPrint('Please enter a numeric value!', 'error');
  } finally {
    return limit ?? -1;
  }
}

void main() {
  String input = getInput();
  int top = getLimitAsInt(input);
  for (int i = 0; i <= top; ++i) {
    prettyPrint('$i', 'info');
  }
}
 
Viimeksi muokattu:
Liittynyt
07.01.2021
Viestejä
687
Jos haluat, että 0 tulostetaan vaikka käyttäjä syöttää mitä vain, niin sitten en näe ongelmaa (tosin Dartin syntaksia en tunne). Itse ehkä tekisin niin, että jos käyttäjä ei esimerkiksi anna mitään arvoa tai antaa jotain muuta kuin numeron, ei printata mitään, tai virhe.
 
Liittynyt
05.03.2023
Viestejä
25
Päädyin kokeilemaan Dartia elämäni ensimmäistä kertaa (pitänyt jo kauan ottaa Flutter haltuun). Koodistani tuli hieman eri näköistä, joten postaan sen tähän evaluoitavaksi sekä @Dellu että muun raadin toimesta (online Dart compiler -versio):

JavaScript:
import 'dart:io';

void main() {
    print('Syötä yläraja.');

    String syote = stdin.readLineSync() ?? '';
    int ylaraja = int.tryParse(syote) ?? 0;

    for (var i = 0; i <= ylaraja; i++) {
        print('$i');
    }
}
EDIT: Vajosin syvemmälle kaninkoloon, kun alkoi kinostella. Over engineerasin, jotta pääsi testailemaan vähän laajemmaltikin. Nyt näyttäisi tältä:
JavaScript:
import 'dart:io';

void prettyPrint(String msg, [String type = 'none']) {
  if (type == 'info') {
    print('\x1B[32m$msg\x1B[0m');
  } else if (type == 'error') {
    print('\x1B[31m$msg\x1B[0m');
  } else {
    print(msg);
  }
}

String getInput() {
  prettyPrint('Enter limit:');
  String input = stdin.readLineSync() ?? '';
  return input;
}

int getLimitAsInt(String input) {
  int? limit;

  try {
    limit = int.parse(input);
  } on FormatException {
    prettyPrint('Please enter a numeric value!', 'error');
  } finally {
    return limit ?? -1;
  }
}

void main() {
  String input = getInput();
  int top = getLimitAsInt(input);
  for (int i = 0; i <= top; ++i) {
    prettyPrint('$i', 'info');
  }
}

Vau! :) Täällä selkeästi osataan tämä homma!
 
Liittynyt
05.03.2023
Viestejä
25
import 'dart:io';

main() {
print('Syötä yläraja.');
var syote = int.parse(stdin.readLineSync());
for (var i = 0; i <= syote; i++) {
print('$i');
}

}


Tällä sain tehtävän tehtyä ja hyväksytysti. Oma taso on näin alkeissa, mutta iloitsen jo siitä että tämän tajusin (täältä saatujen vinkkien myötä).
Tulostus:
0
1
2
3
Ja jos käyttäjän syöttää jonkun muun luvun näiden "sisällä" niin sitten tulee esim. 0,1,2 ja jos syöttääkin esim. -1 niin ei tulosta mitään.
No tästä eteenpäin siis! :)
 
Liittynyt
03.03.2018
Viestejä
1 205
Suosittelen kaikille simppeleiden koodausongelmien äärellä painiville ChatGPT:n käyttöä. Tässä esimerkki @Dellu :n ongelman ratkaisusta, jos se olisi syötetty ChatGPT:hen.

Kysymys:

1678464722118.png


Vastaus:

1678464784990.png


Jatkokysymys ja vastaus:

1678464828289.png


Tuosta on ollut minulle valtavasti hyötyä, jos jotain sattuu unohtamaan, tai ei hahmota täysin mitä koodissa tapahtuu jne. Toki tärkeintä on käyttää sitä hyödyksi, jotta voi oppia tekemään itse.
 
Liittynyt
05.03.2023
Viestejä
25
Suosittelen kaikille simppeleiden koodausongelmien äärellä painiville ChatGPT:n käyttöä. Tässä esimerkki @Dellu :n ongelman ratkaisusta, jos se olisi syötetty ChatGPT:hen.

Kysymys:



Vastaus:



Jatkokysymys ja vastaus:



Tuosta on ollut minulle valtavasti hyötyä, jos jotain sattuu unohtamaan, tai ei hahmota täysin mitä koodissa tapahtuu jne. Toki tärkeintä on käyttää sitä hyödyksi, jotta voi oppia tekemään itse.

Tästähän on iso apu siinä, että kunnolla ymmärtää asiat ja oppii. Tarkoitus just oikeasti myös sisäistää nämä, eikä vaan tehdä tehtäviä ja selvitä jotenkin :D Kaikkea sitä löytyykään, siistiä!
 

totallynotrobot

Tukijäsen
Liittynyt
09.02.2019
Viestejä
670
@Dellu Ihan vain näin lisäyksenä vielä, että useinhan ongelmat ratkeavat myös sillä, että nukkuu yön ylitse ja yrittää seuraavana päivänä ratkoa sen. Vaikka ongelma tuntuisi nyt siltä ettei sitä mitenkään voi itse tajuta niin kyllä sen tajuaa. ChatGPT on kyllä tosi hyvä kaveri näihin, mutta suosittelisin alkeiden opettelussa yrittämään ratkoa ongelmia itse niin paljon kuin mahdollista. Esim. tuon ongelman olisit varmasti hiffannut sillä, että olisit ns. debugannut koodia rivi riviltä itse miettimällä mitä milläkin rivillä tapahtuu, esim.:

print('Syötä yläraja.'); // tulostetaan 'Syötä yläraja'
var syote = int.parse(stdin.readLineSync()); // asetetaan muuttujaan 'syote' käyttäjän antama tieto
for (var i = 0; i <= 3; i++) { // tulostetaan muuttuja 'i' ja kasvatetaan sitä joka kierroksella niin kauan, että se ei ole enää alle kolme
print('$i');

Sitten kun pidät mielessä, että jos asetat muuttujaan jotain niin sitä muuttujaa on pakko käyttää (kärjistetysti ainakin) uudestaan jossain kohtaa koodia ennen kuin tehtävä on valmis, niin olisit varmasti keksinyt ongelman. IDE:issä on yleensä työkalukin tällaiseen rivi-riviltä koodin läpikäymiseen, jonka avulla on helpompi pysyä kärryillä mitä koodissa tapahtuu kun sen pituus kasvaa. Tämä debuggaaminen tulee todennäköisesti kurssilla myöhemmin muodossa tai toisessa aiheeksi.

Mutta juu ChatGPT on tosi hyvä, kun se osaa kertoa mitä pitää muuttaa ja miksi. En siis tiedä vaikka olisit tämän kanssa jo viikon verran tuskaillut ja käynyt suurennuslasilla lävitse, mutta ihan vain näin vinkkinä kun vielä muistan etäisesti omat alkeiden opetteluajat. Mutta aina kannattaa kysyä apua, ikävintä on jäädä jumiin yhteen tehtävään, katoaa vain motivaatio helposti sillä tavalla.
 
Liittynyt
05.03.2023
Viestejä
25
@Dellu Ihan vain näin lisäyksenä vielä, että useinhan ongelmat ratkeavat myös sillä, että nukkuu yön ylitse ja yrittää seuraavana päivänä ratkoa sen. Vaikka ongelma tuntuisi nyt siltä ettei sitä mitenkään voi itse tajuta niin kyllä sen tajuaa. ChatGPT on kyllä tosi hyvä kaveri näihin, mutta suosittelisin alkeiden opettelussa yrittämään ratkoa ongelmia itse niin paljon kuin mahdollista. Esim. tuon ongelman olisit varmasti hiffannut sillä, että olisit ns. debugannut koodia rivi riviltä itse miettimällä mitä milläkin rivillä tapahtuu, esim.:

print('Syötä yläraja.'); // tulostetaan 'Syötä yläraja'
var syote = int.parse(stdin.readLineSync()); // asetetaan muuttujaan 'syote' käyttäjän antama tieto
for (var i = 0; i <= 3; i++) { // tulostetaan muuttuja 'i' ja kasvatetaan sitä joka kierroksella niin kauan, että se ei ole enää alle kolme
print('$i');

Sitten kun pidät mielessä, että jos asetat muuttujaan jotain niin sitä muuttujaa on pakko käyttää (kärjistetysti ainakin) uudestaan jossain kohtaa koodia ennen kuin tehtävä on valmis, niin olisit varmasti keksinyt ongelman. IDE:issä on yleensä työkalukin tällaiseen rivi-riviltä koodin läpikäymiseen, jonka avulla on helpompi pysyä kärryillä mitä koodissa tapahtuu kun sen pituus kasvaa. Tämä debuggaaminen tulee todennäköisesti kurssilla myöhemmin muodossa tai toisessa aiheeksi.

Mutta juu ChatGPT on tosi hyvä, kun se osaa kertoa mitä pitää muuttaa ja miksi. En siis tiedä vaikka olisit tämän kanssa jo viikon verran tuskaillut ja käynyt suurennuslasilla lävitse, mutta ihan vain näin vinkkinä kun vielä muistan etäisesti omat alkeiden opetteluajat. Mutta aina kannattaa kysyä apua, ikävintä on jäädä jumiin yhteen tehtävään, katoaa vain motivaatio helposti sillä tavalla.
Kiitos viestistä! Kävin koodia läpi juuri noin ja onnistuin mm. tekemään ikuisuuskoodia päivän verran :D Kysyin myös koululta, että kuinka kaukana oikeasta olin ja sainkin vastauksen mutta homma ei auennut millään. Sitten vielä pari päivää omaa tolloilua ja rohkaistuin kysymään täältä apua :)
Ehkä vaikeinta (kaiken muun lisäksi) on se, että vaikka sainkin neuvoja niin en heti välttämättä ymmärrä saamaani neuvoa joten käyn pala palalta itse läpi niitä jotta sisäistän hitaasti mutta varmasti. Olen vielä niin alussa tässä hommassa, että onkin tärkeää tehdä itse niin paljon kuin vain pystyn, muuten ei opi

Hyvä kyllä huomata, että alussa on hankalaakin mutta helpottaa jossain vaiheessa
Tsemppiä
 

kolistelija

Make ATK Great Again
Liittynyt
17.02.2018
Viestejä
1 025
ChatGPT:tä käyttäessä on hyvä myös tiedostaa ettei se aina anna oikeaa vastausta. Pahimmillaan sen antamat koodiratkaisut ovat suorastaan pielessä ja joskus sisältävät virheitä jotka haittaavat vain tietyissä tapauksissa. Ei siis kannata suoraan ostaa sen selityksiä, vaan perehtyä niihin kriittisesti niin hyvin kuin oma osaaminen antaa periksi.
 
Liittynyt
17.10.2016
Viestejä
5 395
ChatGPT:tä käyttäessä on hyvä myös tiedostaa ettei se aina anna oikeaa vastausta. Pahimmillaan sen antamat koodiratkaisut ovat suorastaan pielessä ja joskus sisältävät virheitä jotka haittaavat vain tietyissä tapauksissa. Ei siis kannata suoraan ostaa sen selityksiä, vaan perehtyä niihin kriittisesti niin hyvin kuin oma osaaminen antaa periksi.
Juu, se mitä itse olen kokeillut ChatGPT:tä niin vaikka koodi olisikin toimivaa niin siinä saattaa olla jotain todella hulluja juttuja joilla ei ole mitään merkitystä lopputuloksen kannalta tai sitten generoitu koodi on muuten vaan jotenkin käsittämättömän monimutkaista vaikka helpoin ratkaisu olisi huomattavasti simppelimpi.

Ja varsinkin opiskeluvaiheessa kannattaa ensin itse miettiä ja yrittää keksiä ratkaisua, se ei paljoa opeta jos kyselee joka tehtävään suoraan vastauksen ChatGPT:ltä ja copypastettaa sen vastaukseksi. Vasta sitten kun on nukkunut yön yli ja seuraavankin päivän lukenut dokumentaatiota ja hakannut päätä seinään ja taas nukkunut eikä silti ratkea niin kannattaa kysyä apuja.

Itse olen kokeillut generoida ChatGPT:llä kaikkea "tylsää" kirjoitettavaa koodia jonka toiminnan olen itse koodia lukemalla varmistanut. Siinä kyllä säästää aikaa kun ei tarvitse kaikkia tylsiä funktioita sun muita itse naputella mutta tosiaan ei se GPT:kään ole erehtymätön, joutuu senkin jälkiä korjailemaan käsin. Mutta osaa se kirjoittaa kaikkea tylsää boilerplatea aika kätevästi edes sinnepäin niin siihen hommaan ei tarvitse itse aikaa käyttää.
 
Liittynyt
03.03.2018
Viestejä
1 205
Lähinnä sillä tuon ChatGPT esimerkin tuossa toinkin esiin, että itselläni usein alkuvaiheessa tietoa etsiessä googlaamalla ja ongelmia ratkoessa se tiedon määrä oli liian valtava. Googlella löytyi monia ratkaisutapoja, joista osa oli eri versioihin jne. Näennäisesti yksinkertaisiin ongelmiin saattoi sitten kulua älyttömiä määriä aikaa. Kun halusin omaan selainpeliin lisätä napin, piti samalla ymmärtää html, css ja javascript kuviot kaikki kerralla, ennenkuin saa mitään näkyvää ja toimivaa ruudulle jne. ChatGPT:tä on hyvä käyttää työkaluna karsimaan sitä materiaalin määrää ja löytämään ratkaisuvaihtoehtoja, mitä melko helposti pystyy jatkokeskustelulla myös jalostamaan paremmaksi. Sellaisenaan vastauksen kopioimisella tekee lähinnä itselleen hallaa, mutta esimerkin mukaisesti ChatGPT osaa näppärästi kertoa, että mitä funktioissa tapahtuu ja käytännössä opettaa sen asian.

Lisäksi... tulevaisuudessa tullaan varmasti myös tarvitsemaan enenevissä määrin ns. prompt engineerejä, jotka käyttävät AI:ta hyödyksi rakentaakseen valmista materiaalia. Eräänlaista low-code kuviota siis, mikä sekin on oma taiteenlajinsa IT-alalla. Kaikkien ei tarvitse olla matemaattisesti lahjakkaita C-koodareita pärjätäkseen alalla ja mielenkiinnon pysyessä yllä, oppimaan kerkeää kyllä.
 
Liittynyt
05.03.2023
Viestejä
25
Kokeilin tänä aamuna tuota ChatGPT:tä ensimmäisen kerran. Laitoin koodin mitä tein jatkuvasti TAAS ikuisuuskoodiksi ja ohjelma kertoi todella selkeästi mitä mokasin. Loppu vaiheessa kun sain koodia korjattua oikeammaksi, ohjelma näytti miten pitäisi tehdä se oikein.
Oli hyvä, ettei heti alussa tullut tuota että näyttää kuinka tehdä oikein, vaan ensin oli teksti mikä ohjaa oikeaan suuntaan ja jouduin silti itse tekemään suurimman työn.
On tuosta apua, kunhan ei käytä heti ja menee kohta kohdalta läpi ajatuksella. Käytän vain kun olen epätoivoinen
 
Liittynyt
17.10.2016
Viestejä
4 117
Pitäisi saada uudelleen nimettyä tiedostot hakemistosta ja alihakemistoista. Tiedostoista pitäisi muuttaa non-asciit ascii merkeiksi.
Tyyliin àèìòù -> aeiou

Löytyisikö joltain valmista PowerShell scriptiä tuohon?
 
Liittynyt
31.12.2016
Viestejä
443
Pitäisi saada uudelleen nimettyä tiedostot hakemistosta ja alihakemistoista. Tiedostoista pitäisi muuttaa non-asciit ascii merkeiksi.
Tyyliin àèìòù -> aeiou

Löytyisikö joltain valmista PowerShell scriptiä tuohon?
Chatgpt vastaus:
(Get-Content "C:\path\to\input\file.txt") -replace '\p{Mn}' | Set-Content "C:\path\to\output\file.txt" -Encoding ASCII
 
Liittynyt
05.03.2023
Viestejä
25
Minä täällä taas kysyn neuvoa.. Ohessa on tehtävä jota minun pitäisi muokata. Ongelmani on se etten oikein ymmärrä mihin "väliin" laitan muokkauksen niin, että saisin tulostettua tekstin "Keskiarvoa ei voi laskea." Tehtävä on tässä kokonaisuudessaan ilman omaa muokkaustani (muokkasin niin, että jos syötetään pelkkä 0 niin tulostuu "Syötettyjen lukujen summa on 0." ). Käyttäisin if ja else toimintoja mutta nyt en oikein ymmärrä, että mihin "väliin"? Saako tästä joku kiinni? Ja jos mitenkään on aikaa ja kiinnostusta vähän avata samalla sitä kuinka niin oppisin niin että jää mieleen :) Kiitos jo etukäteen!

" Tehtäväpohjassa on mukana yllä esitelty ohjelma, jolla lasketaan syötettyjen lukujen summa. Ohjelmaa on muokattu siten, että se laskee myös syötettyjen lukujen keskiarvon. Keskiarvoa ei voi kuitenkaan laskea tilanteessa, missä lukuja ei ole lainkaan, sillä lukua ei saa jakaa nollalla. Muokkaa ohjelmaa siten, että keskiarvo lasketaan ja tulostetaan vain mikäli käyttäjä syöttää vähintään yhden luvun -- jos keskiarvoa ei voi laskea, ohjelman tulee tulostaa Keskiarvoa ei voi laskea.. "

import 'dart:io';

main() {
print('Kuinka monta lukua luetaan?');
var lukuja = int.parse(stdin.readLineSync());
var summa = 0;


for (int i = 0; i < lukuja; i++) {
print('Syötä luku.');
var luku = int.parse(stdin.readLineSync());
summa = summa + luku;
}

print('Syötettyjen lukujen summa on $summa');
var keskiarvo = summa / lukuja;
print('Syötettyjen lukujen keskiarvo on $keskiarvo');
}
 
Liittynyt
03.03.2018
Viestejä
1 205
Minä täällä taas kysyn neuvoa.. Ohessa on tehtävä jota minun pitäisi muokata. Ongelmani on se etten oikein ymmärrä mihin "väliin" laitan muokkauksen niin, että saisin tulostettua tekstin "Keskiarvoa ei voi laskea." Tehtävä on tässä kokonaisuudessaan ilman omaa muokkaustani (muokkasin niin, että jos syötetään pelkkä 0 niin tulostuu "Syötettyjen lukujen summa on 0." ). Käyttäisin if ja else toimintoja mutta nyt en oikein ymmärrä, että mihin "väliin"? Saako tästä joku kiinni? Ja jos mitenkään on aikaa ja kiinnostusta vähän avata samalla sitä kuinka niin oppisin niin että jää mieleen :) Kiitos jo etukäteen!

" Tehtäväpohjassa on mukana yllä esitelty ohjelma, jolla lasketaan syötettyjen lukujen summa. Ohjelmaa on muokattu siten, että se laskee myös syötettyjen lukujen keskiarvon. Keskiarvoa ei voi kuitenkaan laskea tilanteessa, missä lukuja ei ole lainkaan, sillä lukua ei saa jakaa nollalla. Muokkaa ohjelmaa siten, että keskiarvo lasketaan ja tulostetaan vain mikäli käyttäjä syöttää vähintään yhden luvun -- jos keskiarvoa ei voi laskea, ohjelman tulee tulostaa Keskiarvoa ei voi laskea.. "

import 'dart:io';

main() {
print('Kuinka monta lukua luetaan?');
var lukuja = int.parse(stdin.readLineSync());
var summa = 0;


for (int i = 0; i < lukuja; i++) {
print('Syötä luku.');
var luku = int.parse(stdin.readLineSync());
summa = summa + luku;
}

print('Syötettyjen lukujen summa on $summa');
var keskiarvo = summa / lukuja;
print('Syötettyjen lukujen keskiarvo on $keskiarvo');
}
Ihan pseudona ääneen lukien voisit asiaa käydä rivi riviltä läpi, sillä sitenhän se konekin periaatteessa toimii.

Eli ennenkuin lasket ja printtaat lukujen keskiarvon, sinun pitää tarkistaa summa. Jolloin iffissä on koodia tyyliin "jos summa ei ole nolla, laske ja printaa keskiarvo".

Tulipahan liian nopeasti luettua. Jos siis lukuja ei haluta lainkaan alkuvaiheessa, niin turha ajaa edes loppuosaa koodista.
 
Viimeksi muokattu:

totallynotrobot

Tukijäsen
Liittynyt
09.02.2019
Viestejä
670
Ihan pseudona ääneen lukien voisit asiaa käydä rivi riviltä läpi, sillä sitenhän se konekin periaatteessa toimii.

Eli ennenkuin lasket ja printtaat lukujen keskiarvon, sinun pitää tarkistaa summa. Jolloin iffissä on koodia tyyliin "jos summa ei ole nolla, laske ja printaa keskiarvo".
Ei sinne iffin sisään kannata mennä ollenkaan, jos käyttäjä on sitä mieltä ettei lukuja lasketa (eli antaa luvun 0 tai vähemmän heti alussa). Silloin koko for-loopia ei tarvita mihinkään. @Dellu sinullahan on tuossa tehtävänannossa jo käytännössä paikat if-elselle:
keskiarvo lasketaan ja tulostetaan vain mikäli käyttäjä syöttää vähintään yhden luvun -> if
jos keskiarvoa ei voi laskea, ohjelman tulee tulostaa Keskiarvoa ei voi laskea -> else

Hämmentävä tehtävä ja tehtävänanto kyllä jotenkin. Jos käyttäjä vastaa kysymykseen "Kuinka monta lukua luetaan" vaikka 0 niin pitäisikö silloin kuitenkin tulostaa "Syötettyjen lukujen summa on $summa", kun mitään lukuja ei ole ikinä syötetty? Tai ehkä menen sekaisin, kun on muuttujat "lukuja" ja "luku" niin en nyt migreenin kanssa hiffaa kumpaan muuttujaan tehtävänannossa viitataan.
 
Liittynyt
18.10.2016
Viestejä
272
...
" Tehtäväpohjassa on mukana yllä esitelty ohjelma, jolla lasketaan syötettyjen lukujen summa. Ohjelmaa on muokattu siten, että se laskee myös syötettyjen lukujen keskiarvon. Keskiarvoa ei voi kuitenkaan laskea tilanteessa, missä lukuja ei ole lainkaan, sillä lukua ei saa jakaa nollalla. Muokkaa ohjelmaa siten, että keskiarvo lasketaan ja tulostetaan vain mikäli käyttäjä syöttää vähintään yhden luvun -- jos keskiarvoa ei voi laskea, ohjelman tulee tulostaa Keskiarvoa ei voi laskea.. "
...
Tässä piti vetää ihan mietintämyssy päähän. Ei siksi, että tehtävä olisi haastava vaan siksi, että "esitelty ohjelma" antaa hieman epäammattimaisen kuvan tekijästä monestakin syystä. Pahoittelen kyynistä setämieskoodariasennettani, mutta ei välttämättä ole terveellistä oppia asioita oletusarvoisesti väärin. Täydellisyyttähän ei tarvitse tavoitella, mutta esim. tyypitys olisi paikallaan.

Helpoin reitti lienee jo esitetty vastaus: "älä tee mitään, jos lukuja -muuttujan arvo on 0.

Mutta oletetaan, että meidän täytyy huomioida myös seuraavat seikat, jotta keskiarvo voidaan laskea:
- käyttäjä syöttää iteraatioiden määräksi "0.5", "-1" tai vaikkapa "kissa"
- käyttäjä syöttää luvuksi "0.5", "-1" tai vaikkapa "koira"
- käyttäjä ei syötä mitään

Tein 15min vedoksen siitä, miltä ohjelma voisi näyttää. Kuten todettu, niin "good enough" riittänee koulutehtävissä, täydellisyys sikseen. Mulkaisepa siis täältä esimerkki . Parempi ratkaisu olisi toki tivata käyttäjältä kunnollista, numeerista vastausta eikä vain exit(0), mutta sen saat(te) pähkäillä itseksenne :)
 
Liittynyt
03.03.2018
Viestejä
1 205
Ei sinne iffin sisään kannata mennä ollenkaan, jos käyttäjä on sitä mieltä ettei lukuja lasketa (eli antaa luvun 0 tai vähemmän heti alussa). Silloin koko for-loopia ei tarvita mihinkään. @Dellu sinullahan on tuossa tehtävänannossa jo käytännössä paikat if-elselle:
keskiarvo lasketaan ja tulostetaan vain mikäli käyttäjä syöttää vähintään yhden luvun -> if
jos keskiarvoa ei voi laskea, ohjelman tulee tulostaa Keskiarvoa ei voi laskea -> else

Hämmentävä tehtävä ja tehtävänanto kyllä jotenkin. Jos käyttäjä vastaa kysymykseen "Kuinka monta lukua luetaan" vaikka 0 niin pitäisikö silloin kuitenkin tulostaa "Syötettyjen lukujen summa on $summa", kun mitään lukuja ei ole ikinä syötetty? Tai ehkä menen sekaisin, kun on muuttujat "lukuja" ja "luku" niin en nyt migreenin kanssa hiffaa kumpaan muuttujaan tehtävänannossa viitataan.
Joo tuo on totta. Turhan nopeasti luin tuon tekstin ja huomannut edes, että siellä oli nuo kaksi eri syötettä erikseen. Jos ensimmäinen syöte on 0, niin sitten voi suoraan jättää ajamatta koko loppuosan koodista.
 
Liittynyt
05.03.2023
Viestejä
25
Ei sinne iffin sisään kannata mennä ollenkaan, jos käyttäjä on sitä mieltä ettei lukuja lasketa (eli antaa luvun 0 tai vähemmän heti alussa). Silloin koko for-loopia ei tarvita mihinkään. @Dellu sinullahan on tuossa tehtävänannossa jo käytännössä paikat if-elselle:
keskiarvo lasketaan ja tulostetaan vain mikäli käyttäjä syöttää vähintään yhden luvun -> if
jos keskiarvoa ei voi laskea, ohjelman tulee tulostaa Keskiarvoa ei voi laskea -> else

Hämmentävä tehtävä ja tehtävänanto kyllä jotenkin. Jos käyttäjä vastaa kysymykseen "Kuinka monta lukua luetaan" vaikka 0 niin pitäisikö silloin kuitenkin tulostaa "Syötettyjen lukujen summa on $summa", kun mitään lukuja ei ole ikinä syötetty? Tai ehkä menen sekaisin, kun on muuttujat "lukuja" ja "luku" niin en nyt migreenin kanssa hiffaa kumpaan muuttujaan tehtävänannossa viitataan.
Minuakin hämmentää tämä tehtävänanto :D Mutta ymmärsin niin, että myös tuo teksti "Syötettyjen lukujen summa.." pitää tulostaa, lukuna vain nolla.
 
Liittynyt
05.03.2023
Viestejä
25
Tässä piti vetää ihan mietintämyssy päähän. Ei siksi, että tehtävä olisi haastava vaan siksi, että "esitelty ohjelma" antaa hieman epäammattimaisen kuvan tekijästä monestakin syystä. Pahoittelen kyynistä setämieskoodariasennettani, mutta ei välttämättä ole terveellistä oppia asioita oletusarvoisesti väärin. Täydellisyyttähän ei tarvitse tavoitella, mutta esim. tyypitys olisi paikallaan.

Helpoin reitti lienee jo esitetty vastaus: "älä tee mitään, jos lukuja -muuttujan arvo on 0.

Mutta oletetaan, että meidän täytyy huomioida myös seuraavat seikat, jotta keskiarvo voidaan laskea:
- käyttäjä syöttää iteraatioiden määräksi "0.5", "-1" tai vaikkapa "kissa"
- käyttäjä syöttää luvuksi "0.5", "-1" tai vaikkapa "koira"
- käyttäjä ei syötä mitään

Tein 15min vedoksen siitä, miltä ohjelma voisi näyttää. Kuten todettu, niin "good enough" riittänee koulutehtävissä, täydellisyys sikseen. Mulkaisepa siis täältä esimerkki . Parempi ratkaisu olisi toki tivata käyttäjältä kunnollista, numeerista vastausta eikä vain exit(0), mutta sen saat(te) pähkäillä itseksenne :)
Kiitos viestistä! Fitechin tehtäviä aloitin tekemään omatoimisesti, jotta näen, että kiinnostaako ala ja olisiko minulla mahdollisuus joskus oppia näitä :)
Perehdyn esimerkkiisi ja koitan saada tehtävän tehtyä :D
 

totallynotrobot

Tukijäsen
Liittynyt
09.02.2019
Viestejä
670
Yleensähän nämä tehtävät tuppaavat menemään niin, että myöhemmissä tehtävissä sitten lisätään aiempiin tehtäviin nuo syötteentarkistukset yms. kun ne on teoriassa käyty lävitse. Tässä vaiheessa olisi tarkoitus todennäköisesti opetella if-else-rakenteen käyttöä ja olettaa, että käyttäjä antaa ns. järkeviä syötteitä.

Jotenkin kyllä tuntuu, että nämä ohjelmoinnin alkeita opettavat tehtävät tuppavat usein olemaan jotenkin hankalammin ymmärrettäviä mitä tarvitsisi. Muistan kun itse opettelin vastaavia juttuja niin tehtävänantoa lukiessa menin vain enemmän sekaisin, että mitä tehtävässä oikeasti edes haetaan. Tämä nyt ei sieltä pahimmasta päästä edes ole, mutta tämäkin tehtävä hyötyisi kovasti tuon selostamisen sijaan tai lisäksi ihan vain esimerkeillä, että mitä pitää tulostaa milläkin syötteillä. Esim.:

Kuinka monta lukua luetaan? // 2
Syötä luku. // 5

Syötettyjen lukujen summa on 10
Syötettyjen lukujen keskiarvo on 5
---
Kuinka monta lukua luetaan? // 0

Keskiarvoa ei voi laskea...
---

Kuinka monta lukua luetaan? // 5
Syötä luku. // 0

Syötettyjen lukujen summa on 0
Syötettyjen lukujen keskiarvo on 0

Jne. Näin ei tarvitsi itse arvuutella, että mitähän tämän pitäisi tulostaa syötteellä x ja y... Eikä toisi edes hirveästi lisää työtä, kun ratkaisuvaihtoehto kuitenkin on todennäköisesti sinne mallivastaukseksi annetttu niin tehtävänantoa kirjoittaessa vetäisi vain muutaman kerran koodin lävitse eri syötteillä ja pasteaisi tulosteet tehtävään.
 
Liittynyt
21.10.2016
Viestejä
9 208
Kiitos viestistä! Fitechin tehtäviä aloitin tekemään omatoimisesti, jotta näen, että kiinnostaako ala ja olisiko minulla mahdollisuus joskus oppia näitä :)
Perehdyn esimerkkiisi ja koitan saada tehtävän tehtyä :D
Suosittelisin myös esim. helsingin yliopiston mooceja. Aloittaen juurikin täysin perusteista: Kaikki tehtävät - Ohjelmoinnin perusteet ja jatkokurssi 2023 (löytyy myös luentomateriaalit tehtävien tueksi, pänttäämään vain. Lisätietoa). Sen jälkee sit seuraavaa steppiä, vaikkapa Full stack open (jonka hyvin osaamalla alkaa olla jo teoriassa valmis joihinki työtehtäviin), tosin jokin pelkkä javascript (+yleisesti webohjelmointia) kurssi olisi hyvä käydä ensin.
 
Viimeksi muokattu:
Liittynyt
21.10.2016
Viestejä
9 208
Pitäisi saada uudelleen nimettyä tiedostot hakemistosta ja alihakemistoista. Tiedostoista pitäisi muuttaa non-asciit ascii merkeiksi.
Tyyliin àèìòù -> aeiou

Löytyisikö joltain valmista PowerShell scriptiä tuohon?
Chatgpt vastaus:
(Get-Content "C:\path\to\input\file.txt") -replace '\p{Mn}' | Set-Content "C:\path\to\output\file.txt" -Encoding ASCII


Pitipäs itsekin tutustua tohon chatgpt:hen, ku ihmettelin vastausta. Toihan vain muuttaa yhden tiedoston kerrallaan, joka lienee helpompi käyttäjän omassa tiedostohallintasoftassa tehdä, ku räplätä komentorivillä tiedosto kerrallaan? chatgpt vastaus, ku kopsasin juhaan viestin:
Koodi:
$Path = "C:\Tiedostojen\Polku" # Muuta hakemiston polku vastaamaan omaasi
$Files = Get-ChildItem $Path -Recurse

Foreach ($File in $Files) {
    If ($File.Name -match '[^\u0000-\u007F]') {
        $NewName = $File.Name -replace '[àáâãäå]', 'a' `
            -replace '[èéêë]', 'e' `
            -replace '[ìíîï]', 'i' `
            -replace '[òóôõö]', 'o' `
            -replace '[ùúûü]', 'u' `
            -replace '[ýÿ]', 'y' `
            -replace '[Ææ]', 'ae' `
            -replace '[Øø]', 'o' `
            -replace '[Åå]', 'a' `
            -replace '[Çç]', 'c' `
            -replace '[Ññ]', 'n' `
            -replace '[ß]', 'ss'

        $NewPath = Join-Path $File.Directory.FullName $NewName
        Rename-Item -Path $File.FullName -NewName $NewName -Force
    }
}
Kantsii toki testata ensin vaikkapa kopioimalla osa kansion sisällöstä alikansioineen toiseen kansioon ja ajaa siellä.

Näyttökuva 2023-3-21 kello 11.17.47.png
Näyttökuva 2023-3-21 kello 11.17.53.png
 
Viimeksi muokattu:
Liittynyt
18.10.2016
Viestejä
272
Yleensähän nämä tehtävät tuppaavat menemään niin, että myöhemmissä tehtävissä sitten lisätään aiempiin tehtäviin nuo syötteentarkistukset yms. kun ne on teoriassa käyty lävitse. Tässä vaiheessa olisi tarkoitus todennäköisesti opetella if-else-rakenteen käyttöä ja olettaa, että käyttäjä antaa ns. järkeviä syötteitä.
Hyvin todennäköistä. Itse jätinkin AMK:n kesken 20 vuotta sitten pääosin tästä syystä. Outoa menoa, että ikään kuin ensin hyväksytään "pull request", eli tehtävä, joka toimii suurinpiirtein sinnepäin. Sen jälkeen refaktoroidaan ja palataan aina samaan ongelmaan sitä ehostellen.

Toki jatkuva kehitys on OK, Ja sehän on välillä ihan hauskaakin, että oppii uusia jippoja koodin luettavuuden parantamiseksi ja optimoimiseksi. Mutta se lähtökohta, että tehtävänannossa asiat ovat fundamentaalisesti pielessä, koska "opetellaan if-else ja ette te kuitenkaan muuta ymmärrä", on mielestäni epäterveellistä. Jos todella halutaan opettaa kieli-agnostisia operaatioita, niin sitten työkaluksi sopisi yhtä hyvin Scratch :)

Mutta tsemppiä edelleen @Dellu opiskeluihin. Täällä me muut päivystämme ja vastaamme silloin, kun menee kieli solmuun
 
Liittynyt
17.10.2016
Viestejä
4 117
Pitipäs itsekin tutustua tohon chatgpt:hen, ku ihmettelin vastausta. Toihan vain muuttaa yhden tiedoston kerrallaan, joka lienee helpompi käyttäjän omassa tiedostohallintasoftassa tehdä, ku räplätä komentorivillä tiedosto kerrallaan? chatgpt vastaus, ku kopsasin juhaan viestin:
Koodi:
$Path = "C:\Tiedostojen\Polku" # Muuta hakemiston polku vastaamaan omaasi
$Files = Get-ChildItem $Path -Recurse

Foreach ($File in $Files) {
    If ($File.Name -match '[^\u0000-\u007F]') {
        $NewName = $File.Name -replace '[àáâãäå]', 'a' `
            -replace '[èéêë]', 'e' `
            -replace '[ìíîï]', 'i' `
            -replace '[òóôõö]', 'o' `
            -replace '[ùúûü]', 'u' `
            -replace '[ýÿ]', 'y' `
            -replace '[Ææ]', 'ae' `
            -replace '[Øø]', 'o' `
            -replace '[Åå]', 'a' `
            -replace '[Çç]', 'c' `
            -replace '[Ññ]', 'n' `
            -replace '[ß]', 'ss'

        $NewPath = Join-Path $File.Directory.FullName $NewName
        Rename-Item -Path $File.FullName -NewName $NewName -Force
    }
}
Kantsii toki testata ensin vaikkapa kopioimalla osa kansion sisällöstä alikansioineen toiseen kansioon ja ajaa siellä.


Tämä on selkeä merkki siitä, että pitää tuota chatGPT:tä myös kokeilla :)

Oma ratkaisuni oli tämä ja jäi tänne päivittämättä, jos joskus muullekkin olisi ollut käyttöä.

Menee vain hakemistoon missä tiedostot/alihakemistot ovat ja rekursiivisesti päivittää pelkät tiedostot. Replaceja toki pitää tarpeen mukaan lisätä, että saa kaikki tarvittavat merkit vaihdettua.

Koodi:
Get-ChildItem -File -Recurse | % { Rename-Item -Path $_.PSPath -NewName ( $_.name.replace( "ü", "u").replace("ä","a").replace("ö","o").replace("è","e").replace("é","e").replace("ù","u").replace("â","a").replace("ê","e").replace("î","i").replace("ô","o" )}
 
Liittynyt
19.10.2016
Viestejä
1 924
Mitenkäs saan bat-filen ajettua Administraattorina ilman UAC-promptia ja muutenkin silenttina?

Tässä bat-filen sisältö:

@Echo off
pnputil.exe /enable-device "PCI\VEN_8086&DEV_1902&SUBSYS_8169103C&REV_06\3&11583659&0&10"
pause

Eli kun filua klikkaa, niin batti ajetaan silenttina ja administraattorina.
 
Liittynyt
21.10.2016
Viestejä
9 208
Mitenkäs saan bat-filen ajettua Administraattorina ilman UAC-promptia ja muutenkin silenttina?

Tässä bat-filen sisältö:

@Echo off
pnputil.exe /enable-device "PCI\VEN_8086&DEV_1902&SUBSYS_8169103C&REV_06\3&11583659&0&10"
pause

Eli kun filua klikkaa, niin batti ajetaan silenttina ja administraattorina.
chatgpt:n vastaus, olisko se mitä haet?
Voit yrittää seuraavia tapoja ajaa bat-tiedosto Administraattorina ilman UAC-promptia ja hiljaisessa tilassa:

  1. Käytä Windows Task Scheduler -ohjelmaa luomaan tehtävä, joka suorittaa bat-tiedoston Administraattorina. Voit asettaa tehtävän asetukset niin, että se suoritetaan hiljaisessa tilassa. Tämä tapahtuu valitsemalla "Run with highest privileges" ja "Hidden" tehtävän asetuksista.
  2. Käytä PowerShellia ajamaan bat-tiedosto Administraattorina. Voit käyttää seuraavaa komentoa suorittaaksesi bat-tiedoston hiljaisesti PowerShellin avulla:
    Start-Process powershell -Verb runAs -ArgumentList "-command & 'path\to\your\bat\file.bat'" -WindowStyle Hidden
    Vaihda "path\to\your\bat\file.bat" oikeaksi poluksi bat-tiedostoon.
  3. Käytä "Run as administrator" -komennolla varustettua pikanäppäintä. Voit luoda pikanäppäimen, joka käynnistää bat-tiedoston Administraattorina. Voit sitten käyttää seuraavia vaiheita:
    1. Etsi bat-tiedosto ja napsauta sitä hiiren kakkospainikkeella.
    2. Valitse "Send to" ja sitten "Desktop (create shortcut)".
    3. Siirry työpöydälle ja napsauta hiiren kakkospainikkeella luotua pikakuvaketta.
    4. Valitse "Properties" ja sitten "Advanced".
    5. Valitse "Run as administrator" ja "OK".
    6. Tallenna asetukset napsauttamalla "Apply" ja "OK".
Näiden menetelmien pitäisi auttaa sinua ajamaan bat-tiedosto Administraattorina ilman UAC-promptia ja hiljaisessa tilassa. Muista kuitenkin, että bat-tiedoston ajaminen Administraattorina voi aiheuttaa turvallisuusriskin, joten varmista, että tiedostoa ei ole muokattu haitallisesti ennen sen ajamista.
 
Liittynyt
05.03.2023
Viestejä
25
Noniin, nyt on pakko laittaa tuon tehtävän lopputulema tänne :D Siis uskomatonta miten se olikin sitten loppu viimein yksinkertainen ja mietin tässä nyt vain, että miten en muka tajunnut! :D Kiitos kaikille avusta! Helpottivat paljon ja taas onnistuin sisäistämään näitä asioita paremmin, kun luin vinkkejänne. Pakko vielä nauraa, että en tajunnut, että voin laittaa allekkain kaksi print- käskyä (*huutonaurua*) ja osittain siksi en vaan edennyt.. huoh :)

Mutta tässä se yksinkertainen tehtävä nyt sitten on:

import 'dart:io';

main() {
print('Kuinka monta lukua luetaan?');
var lukuja = int.parse(stdin.readLineSync());
var summa = 0;

if (lukuja <= 0) {
print('Syötettyjen lukujen summa on $summa');
print('Keskiarvoa ei voi laskea.');

}else{

for (int i = 0; i < lukuja; i++) {
print('Syötä luku.');
var luku = int.parse(stdin.readLineSync());
summa = summa + luku;
}

print('Syötettyjen lukujen summa on $summa');
var keskiarvo = summa / lukuja;
print('Syötettyjen lukujen keskiarvo on $keskiarvo');
}
}
 
Liittynyt
05.03.2023
Viestejä
25
Ja TAAS olen ihan hukassa... Jos joku ennättää ja jaksaa auttaa niin olisin kiitollinen! Tässä tehtävä, tehtävän esimerkki ja lopussa meikäläisen yritys ratkaista tehtävä (epäonnistunut). Olen kysynyt jos tuon FiTechin sivujen kautta apua, mutta ikävä kyllä en siltäkään ymmärrä. Selkeästi taitoni eivät riitä koodaukseen, mutta en halua vielä luovuttaa, saattaa olla kuitenkin että jossain vaiheessa löytyy se juttu missä olen hyväkin :D
Mutta tässä tehtävä, esimerkki ja oma yritys:

Kirjoita ohjelma, joka kysyy käyttäjältä lukuja kunnes käyttäjä syöttää luvun 0. Tämän jälkeen ohjelma tulostaa syötettyjen lukujen keskiarvon. Käytä luvun kysymiseen tekstiä Syötä luku. ja syötettyjen lukujen summan tulostamiseen tekstiä Keskiarvo: 3.5 (edellä keskiarvo 3.5). Lukua 0 ei huomioida keskiarvon laskemisessa. Mikäli käyttäjä ei syötä yhtäkään lukua, ohjelman tulee tulostaa viesti Keskiarvoa ei voi laskea. Alla on esimerkki odotetusta ohjelman toiminnasta.Syötä luku.
< 3
Syötä luku.
< 2
Syötä luku.
< 0
Keskiarvo: 2.5

Toinen esimerkki.Syötä luku.
< 0
Keskiarvoa ei voi laskea.

****************'
Oma viritelmä jossa vastaus Infinity...

import 'dart:io';

main() {
var summa = 0;
var luku = 0;

while (true) {
print('Syötä luku.');
var syote = int.parse(stdin.readLineSync());
if (syote <= 0) {
break;
}
summa += syote;
summa ++;
}
if (summa > 0) {
var keskiarvo = summa / luku;
print('Keskiarvo: $keskiarvo');
}else{
print('Keskiarvoa ei voi laskea.');
}

}
 
Liittynyt
17.10.2016
Viestejä
7
Ja TAAS olen ihan hukassa... Jos joku ennättää ja jaksaa auttaa niin olisin kiitollinen! Tässä tehtävä, tehtävän esimerkki ja lopussa meikäläisen yritys ratkaista tehtävä (epäonnistunut). Olen kysynyt jos tuon FiTechin sivujen kautta apua, mutta ikävä kyllä en siltäkään ymmärrä. Selkeästi taitoni eivät riitä koodaukseen, mutta en halua vielä luovuttaa, saattaa olla kuitenkin että jossain vaiheessa löytyy se juttu missä olen hyväkin :D
Mutta tässä tehtävä, esimerkki ja oma yritys:

Kirjoita ohjelma, joka kysyy käyttäjältä lukuja kunnes käyttäjä syöttää luvun 0. Tämän jälkeen ohjelma tulostaa syötettyjen lukujen keskiarvon. Käytä luvun kysymiseen tekstiä Syötä luku. ja syötettyjen lukujen summan tulostamiseen tekstiä Keskiarvo: 3.5 (edellä keskiarvo 3.5). Lukua 0 ei huomioida keskiarvon laskemisessa. Mikäli käyttäjä ei syötä yhtäkään lukua, ohjelman tulee tulostaa viesti Keskiarvoa ei voi laskea. Alla on esimerkki odotetusta ohjelman toiminnasta.Syötä luku.
< 3
Syötä luku.
< 2
Syötä luku.
< 0
Keskiarvo: 2.5

Toinen esimerkki.Syötä luku.
< 0
Keskiarvoa ei voi laskea.

****************'
Oma viritelmä jossa vastaus Infinity...

import 'dart:io';

main() {
var summa = 0;
var luku = 0;

while (true) {
print('Syötä luku.');
var syote = int.parse(stdin.readLineSync());
if (syote <= 0) {
break;
}
summa += syote;
summa ++;
}
if (summa > 0) {
var keskiarvo = summa / luku;
print('Keskiarvo: $keskiarvo');
}else{
print('Keskiarvoa ei voi laskea.');
}

}
Mikä on tämän muuttujan arvo siinä vaiheessa, kun lasket keskiarvoa?
var luku = 0;
 
Toggle Sidebar

Statistiikka

Viestiketjut
239 528
Viestejä
4 189 994
Jäsenet
70 763
Uusin jäsen
Diileri85

Hinta.fi

Ylös Bottom