Onko C ohjelmointikieli helppo oppia

Törmäsin verkossa ärsyttävään opastukseen. ( https://s7.gifyu.com/images/strchr2.png ). Tuossahan opastetaan, selvittämään, onko joku merkki merkkijonossa. Katso kuvaa ja yritä tajuta kuinka tuota soveltaisit omassa ohjelmassasi.

Tein samasta asiasta itse esimerkin, jossa ei ole mukana mitään mikä ei 100% liity asiaan ( https://s7.gifyu.com/images/strchr1.png ). Ja tästä saattaa jo aloittelijakin keksiä kuinka asia pitää hoitaa. Lisätään tähän vielä että tuo verkosta löytynyt ohje on vielä englannin kielinen, joka jo yksinään saattaa estää asian ymmärtämisen.

Niin, onko C helppo oppia?
662283
Äänestä

Muut lukivat myös

Vastaukset 66

Vanhimmat

Lisäksi on näitä täysin virheellisiä ohjeita kuten tämä strcat() ohje, joka opastaa kuinka kaksi merkkijonoa yhdistetään toisiinsa.

Montako virhettä löydät ohjeesta?

Äänestä

  • Kas kun netissä kuka tahansa voi kirjoittaa verkkosivulleen ihan mitä tahansa soopaa. Tämä kannattaa pitää aina mielessä varsinkin, jos perustaa ostopäätöstään nettiarvosteluihin. Jokainen eläköityvä putkimies ja koulupudokas muuttuu nettiin päästessään lääketieteen ja tietotekniikan eritysasiantuntijaksi.

    Äänestä

  • Anonyymi kirjoitti:

    Kas kun netissä kuka tahansa voi kirjoittaa verkkosivulleen ihan mitä tahansa soopaa. Tämä kannattaa pitää aina mielessä varsinkin, jos perustaa ostopäätöstään nettiarvosteluihin. Jokainen eläköityvä putkimies ja koulupudokas muuttuu nettiin päästessään lääketieteen ja tietotekniikan eritysasiantuntijaksi.

    Niinpä,+jotta+ei+vain+sanottaisi+jonkin+olevan+väärin+täytyy+myös+esittää+kuinka+se+tulisi+hoitaa.+Tässä+alla+tuon+esimerkin+virheet+korjattuna,+ja+muotoiltuna+niin+että+asia+on+helppo+ymmärtää:#include+<stdio.h>#include+<string.h>int+main(void)+{+++char+str1[11]+=+"Hei";+++char+str2[8]+=+"+Seppo!";+++strcat(str1,+str2);+++printf("%s",+str1); return+0;}En+viitsinyt+kuvana+laittaa,+vaikka+tiedän+ettei+nuo+tabuloinnit+säily.int+main(void)kertoo+että+ohjelma+palauttaa+int+tyyppisen+paluuarvon,+ja+(void)+kertoo+että+se+ei+ota+vastaan+parametreja.str1+ja+str2+muuttujat+vaativat+tilanvarauksen,+annoin+minimi+arvot.+Joten+opastus+sisälsi+kolme+pahaa+virhettä.Kommentointisi+sävystä+päätellen+on+aika+lopettaa+c:stä+puhuminen+vähäksi+aikaa,+tehdään+niin.+Ter.+Sekatyömies

    Äänestä

  • Anonyymi kirjoitti:

    Niinpä,+jotta+ei+vain+sanottaisi+jonkin+olevan+väärin+täytyy+myös+esittää+kuinka+se+tulisi+hoitaa.+Tässä+alla+tuon+esimerkin+virheet+korjattuna,+ja+muotoiltuna+niin+että+asia+on+helppo+ymmärtää:#include+<stdio.h>#include+<string.h>int+main(void)+{+++char+str1[11]+=+"Hei";+++char+str2[8]+=+"+Seppo!";+++strcat(str1,+str2);+++printf("%s",+str1); return+0;}En+viitsinyt+kuvana+laittaa,+vaikka+tiedän+ettei+nuo+tabuloinnit+säily.int+main(void)kertoo+että+ohjelma+palauttaa+int+tyyppisen+paluuarvon,+ja+(void)+kertoo+että+se+ei+ota+vastaan+parametreja.str1+ja+str2+muuttujat+vaativat+tilanvarauksen,+annoin+minimi+arvot.+Joten+opastus+sisälsi+kolme+pahaa+virhettä.Kommentointisi+sävystä+päätellen+on+aika+lopettaa+c:stä+puhuminen+vähäksi+aikaa,+tehdään+niin.+Ter.+Sekatyömies

    Tuhlaat pinomuistia. Varaa merkkijonoille muisti dynaamisesti vaikka malloc()-funktiolla. Joudut käyttämään stdlib-kirjastoa.
    https://www.tutorialspoint.com/c_standard_library/c_function_malloc.htm

    Äänestä

  • Anonyymi kirjoitti:

    Tuhlaat pinomuistia. Varaa merkkijonoille muisti dynaamisesti vaikka malloc()-funktiolla. Joudut käyttämään stdlib-kirjastoa.
    https://www.tutorialspoint.com/c_standard_library/c_function_malloc.htm

    Niinpä+taas+palattaisiin+siihen+mikä+on+helppo+ja+mikä+ei,+esimerkki+oli+nimen+omaan+typistetty+helposti+ymmärrettäväksi.+Dynaaminen+muistinvaraus+(+malloc();+)+ja+sen+vapauttaminen+(+free();+)+on+vaihtoehto+isompien+arrays[]+muutujien+kanssa+kun+tarvittavan+muistin+määrää+ei+tiedetä+etukäteen+ohjelmaa+kirjoitettaessa.+Esimerkki+sellaisessa+tilanteesta+kun+ohjelmoija+ei+voi+tietää+etukäteen,+minkä+kokoisia+tiedostoja+käyttäjä+haluaa+avata+ohjelmalla,+näin+voi+olla+vaikka++kuvankäsittelyohjelman+kanssa.Mutta+tässä+yksi+tapa+rajata+ylimääräinen+muistinkäyttö,+vaikka+en+kyllä+suosittele+tähän+esimerkinkään+tapaukseen,+aivan+turhaa+elvistelyä+pienikokoisissa+muuttujissa:#include+<stdio.h>#include+<string.h>int+main(void)+{+++char+str1[sizeof("Hei")]+=+"Hei";+++char+str2[sizeof(str1)+++sizeof("+Seppo!")]+=+"+Seppo!";+++int+m+=+sizeof(str1)+++sizeof(str2);+++strcat(str1,+str2);+++printf("%s+koko:+%d",+str1,+m); return+0;}

    Äänestä

  • Anonyymi kirjoitti:

    Niinpä+taas+palattaisiin+siihen+mikä+on+helppo+ja+mikä+ei,+esimerkki+oli+nimen+omaan+typistetty+helposti+ymmärrettäväksi.+Dynaaminen+muistinvaraus+(+malloc();+)+ja+sen+vapauttaminen+(+free();+)+on+vaihtoehto+isompien+arrays[]+muutujien+kanssa+kun+tarvittavan+muistin+määrää+ei+tiedetä+etukäteen+ohjelmaa+kirjoitettaessa.+Esimerkki+sellaisessa+tilanteesta+kun+ohjelmoija+ei+voi+tietää+etukäteen,+minkä+kokoisia+tiedostoja+käyttäjä+haluaa+avata+ohjelmalla,+näin+voi+olla+vaikka++kuvankäsittelyohjelman+kanssa.Mutta+tässä+yksi+tapa+rajata+ylimääräinen+muistinkäyttö,+vaikka+en+kyllä+suosittele+tähän+esimerkinkään+tapaukseen,+aivan+turhaa+elvistelyä+pienikokoisissa+muuttujissa:#include+<stdio.h>#include+<string.h>int+main(void)+{+++char+str1[sizeof("Hei")]+=+"Hei";+++char+str2[sizeof(str1)+++sizeof("+Seppo!")]+=+"+Seppo!";+++int+m+=+sizeof(str1)+++sizeof(str2);+++strcat(str1,+str2);+++printf("%s+koko:+%d",+str1,+m); return+0;}

    Ei tuo muuta asiaa mihinkään. Pinomuistia kuluu tasan yhtä rajusti.

    Opetelkaa kakarat ensin assembly, ja siirtykää vasta sitten jonninjoutaviin kieliin.

    Äänestä

  • Anonyymi kirjoitti:

    Ei tuo muuta asiaa mihinkään. Pinomuistia kuluu tasan yhtä rajusti.

    Opetelkaa kakarat ensin assembly, ja siirtykää vasta sitten jonninjoutaviin kieliin.

    Niin kuluu, mutta se voidaan vapauttaa, ja varata uudestaan uudessa koossa. Ja lopeta tuo "kakarointi". Minäkin aloitin debug ohjelmalla kirjoittamalla suoraan konekielistä koodia, joka oli todella hankalaa jo 20 rivisenä pätkänä. Tein myös pahimman mokani kirjoittamalla suoraan MBR sektoriin. Siihen aikaan ei ollut monikaan kone verkossa, ja tiedon saanti oli kirjaston varassa, menikin pitkä aika ennen kuin asia oli korjattu.

    Äänestä

  • Anonyymi kirjoitti:

    Niin kuluu, mutta se voidaan vapauttaa, ja varata uudestaan uudessa koossa. Ja lopeta tuo "kakarointi". Minäkin aloitin debug ohjelmalla kirjoittamalla suoraan konekielistä koodia, joka oli todella hankalaa jo 20 rivisenä pätkänä. Tein myös pahimman mokani kirjoittamalla suoraan MBR sektoriin. Siihen aikaan ei ollut monikaan kone verkossa, ja tiedon saanti oli kirjaston varassa, menikin pitkä aika ennen kuin asia oli korjattu.

    Sizeof-operaattorin varaamaa pinomuistia ei vapauteta mitenkään. Käännösvaiheessa tehdään muistinvaraus, joka kestää maailman tappiin. Tulee stack overflow riski.

    Opetelkaa ensin koodauksen alkeet. Jokainen on toki amatööri alkuvaiheessa, itsekin 1970-luvulla. Yrittäkää kehittyä, ja älkää missään nimessä opetelko koodaamaan päin persettä, kuten pinomuistia tuhlaten.

    Aloittakaa aasta, eli assemblystä.

    Äänestä

  • Anonyymi kirjoitti:

    Sizeof-operaattorin varaamaa pinomuistia ei vapauteta mitenkään. Käännösvaiheessa tehdään muistinvaraus, joka kestää maailman tappiin. Tulee stack overflow riski.

    Opetelkaa ensin koodauksen alkeet. Jokainen on toki amatööri alkuvaiheessa, itsekin 1970-luvulla. Yrittäkää kehittyä, ja älkää missään nimessä opetelko koodaamaan päin persettä, kuten pinomuistia tuhlaten.

    Aloittakaa aasta, eli assemblystä.

    Sizeof ei varaa mitään, sillä selvitetään kohteen tarvitsema tila.

    Äänestä

  • Anonyymi kirjoitti:

    Ei tuo muuta asiaa mihinkään. Pinomuistia kuluu tasan yhtä rajusti.

    Opetelkaa kakarat ensin assembly, ja siirtykää vasta sitten jonninjoutaviin kieliin.

    Jos viittaan C-kieleen sanalla jonninjoutava niin se kyllä paljastaa että et taida juurikaan ymmärtää ohjelmoinnista tuon taivaallista.

    Nykyiset C-kääntäjät tekevät optimoinnit tapissa niin hyvää binääriä ettei assemblerilla tehty juuri tuo mitään etuja. C-kielellä on kuitenkin mahdollista kirjoittaa paljon laajempia ohjelmia tai kirjastoja kun ohjelman suunnittelu on paljon helpompaa tuollaisella jo lähes ihmismäisellä kielellä.

    Äänestä

  • Anonyymi kirjoitti:

    Jos viittaan C-kieleen sanalla jonninjoutava niin se kyllä paljastaa että et taida juurikaan ymmärtää ohjelmoinnista tuon taivaallista.

    Nykyiset C-kääntäjät tekevät optimoinnit tapissa niin hyvää binääriä ettei assemblerilla tehty juuri tuo mitään etuja. C-kielellä on kuitenkin mahdollista kirjoittaa paljon laajempia ohjelmia tai kirjastoja kun ohjelman suunnittelu on paljon helpompaa tuollaisella jo lähes ihmismäisellä kielellä.

    Eipä vaan mahtunut C-kielinen ohjelmakoodi mikrokontrollerin muistiin. Oli pakko kirjoittaa softa uusiksi assemblyllä.

    Sinulle suosittelen Scratchia. https://en.scratch-wiki.info/wiki/Scratch_3.0

    Äänestä

  • Anonyymi kirjoitti:

    Eipä vaan mahtunut C-kielinen ohjelmakoodi mikrokontrollerin muistiin. Oli pakko kirjoittaa softa uusiksi assemblyllä.

    Sinulle suosittelen Scratchia. https://en.scratch-wiki.info/wiki/Scratch_3.0

    Sinulle suosittelen helmitaulua. Kysy jos isi ostaisi semmoisen.

    Tuo on elitismiä ja turhaa elvistelyä kun otsikko puhuu siitä, onko c-kieli helppo oppia. Nykyisin on hyvin erikoisesta sovelluksesta kyse jos harrastelijakäytössä on niin surkea mikrokontrolleri käytössä ettei sinne mahdu C:llä koodaamaan. At-tiny maksaa alle euron kappale, sen saa suoraan USB-portiin ja koodata voi C:llä. Eli kyllä vähän haetaan jo erikoisuutta jos on "pakko" käyttää assyä.

    Eri juttu kokonaan on sitten ammattikäyttö. Eli silloin kun etitään halvinta mahdolista komponenttia jotta suurissa tuotantomäärissä saadaan sääntöä. Sillä keskustelulla ei ole mitään tekemistä taas c-kielen opiskelun kanssa.

    Eli mene vaan itseesi.

    Äänestä

  • Anonyymi kirjoitti:

    Niinpä,+jotta+ei+vain+sanottaisi+jonkin+olevan+väärin+täytyy+myös+esittää+kuinka+se+tulisi+hoitaa.+Tässä+alla+tuon+esimerkin+virheet+korjattuna,+ja+muotoiltuna+niin+että+asia+on+helppo+ymmärtää:#include+<stdio.h>#include+<string.h>int+main(void)+{+++char+str1[11]+=+"Hei";+++char+str2[8]+=+"+Seppo!";+++strcat(str1,+str2);+++printf("%s",+str1); return+0;}En+viitsinyt+kuvana+laittaa,+vaikka+tiedän+ettei+nuo+tabuloinnit+säily.int+main(void)kertoo+että+ohjelma+palauttaa+int+tyyppisen+paluuarvon,+ja+(void)+kertoo+että+se+ei+ota+vastaan+parametreja.str1+ja+str2+muuttujat+vaativat+tilanvarauksen,+annoin+minimi+arvot.+Joten+opastus+sisälsi+kolme+pahaa+virhettä.Kommentointisi+sävystä+päätellen+on+aika+lopettaa+c:stä+puhuminen+vähäksi+aikaa,+tehdään+niin.+Ter.+Sekatyömies

    On tuo kyllä niin anaalista käyttä funktioita merkkijonojen peruskäsittelyyn, vieläkö noita joutuu C:ssä käyttämään? Tässä D-kielen vastine. Tykkään D:stä siksi, koska se on melkein kuin C, mutta vähän modernisoiduin ominaisuuksin.

    module testi;
    import std.string;
    import std.stdio;

    int main(void) {
    string str1 = "Hei";
    string str2 = " Seppo!";
    str1~= str2;
    writeln(str2);

    return 0;
    }

    Äänestä

  • Anonyymi kirjoitti:

    On tuo kyllä niin anaalista käyttä funktioita merkkijonojen peruskäsittelyyn, vieläkö noita joutuu C:ssä käyttämään? Tässä D-kielen vastine. Tykkään D:stä siksi, koska se on melkein kuin C, mutta vähän modernisoiduin ominaisuuksin.

    module testi;
    import std.string;
    import std.stdio;

    int main(void) {
    string str1 = "Hei";
    string str2 = " Seppo!";
    str1~= str2;
    writeln(str2);

    return 0;
    }

    Mikä on D -kielen vahvuus, eli millä se on paikkansa lunastanut?

    Äänestä

Pythonilla kaikki onnistuu suoraan paljon paremmin ja nopeammin ilman mitään oppimisvaikeutta. Ja jos ohjelman ajaa Pypyllä, se on aina nopeampi kuin C:llä koodattu risukasa.

Äänestä
  • Olet kuutamolla kuin se kuuluisa Tamppoonin naru.

    Pythonissa hyödynnetään tosi paljon aikuisten ohjelmointikielillä tehtyjä kirjastoja.

    Terveisin: konenäkijä

    Äänestä

  • Olet oikeassa, PyPy on vaihtoehtoinen nopeampi Python-toteutus. PyPy pyrkii nopeuteen ja pienempään muistin käyttöön verrattuna alkuperäisen Python-tulkkiin.

    Olen itsekin testannut tuota nopeutta, ja saanut huomata että noin 2 kertaa nopeammin toimii kuin vastaava C sovellus. Valitettavasti PyPy tulkin kautta ei voi ajaa mitä tahansa Python sovellusta. Mutta silloin kun voi se kannattaa tehdä.

    Äänestä

  • Anonyymi kirjoitti:

    Olet oikeassa, PyPy on vaihtoehtoinen nopeampi Python-toteutus. PyPy pyrkii nopeuteen ja pienempään muistin käyttöön verrattuna alkuperäisen Python-tulkkiin.

    Olen itsekin testannut tuota nopeutta, ja saanut huomata että noin 2 kertaa nopeammin toimii kuin vastaava C sovellus. Valitettavasti PyPy tulkin kautta ei voi ajaa mitä tahansa Python sovellusta. Mutta silloin kun voi se kannattaa tehdä.

    Lisätäänpä vielä C ei ole mikään risukasa, ei missään nimessä.

    Wikipedia sanoo näin:
    C on yleiskäyttöinen, imperatiivinen ja rakenteinen käännettävä tietokoneiden ohjelmointikieli, joka on levinnyt laajalle 1970-luvulta lähtien, jolloin Dennis Ritchie kehitti sen UNIX-käyttöjärjestelmää varten. Kielessä yhdistyvät koneenläheisyys ja korkean tason kielen ominaisuudet.

    Äänestä

  • Python on myös parempi merkkijonojen käsittelyssä. Esimerkkinä vaikka tämä

    >>> str="Tämä on yöllä kirjoitettu"
    >>> str.find('ö')

    Pythonilla ei ääkköset ja öökköset ole mikään ongelma, mutta yritäppä C:llä löytää monesko merkki ö on str -merkkijonossa. C:ssä moni merkkijonon käsittelyyn tarkoitettu funktion ei toimi ollenkaan skandien kanssa, ja se syö C:n arvostusta niin pahasti, että jos pitää valita vain toinen niin se on Python.

    Äänestä

  • Anonyymi kirjoitti:

    Olet oikeassa, PyPy on vaihtoehtoinen nopeampi Python-toteutus. PyPy pyrkii nopeuteen ja pienempään muistin käyttöön verrattuna alkuperäisen Python-tulkkiin.

    Olen itsekin testannut tuota nopeutta, ja saanut huomata että noin 2 kertaa nopeammin toimii kuin vastaava C sovellus. Valitettavasti PyPy tulkin kautta ei voi ajaa mitä tahansa Python sovellusta. Mutta silloin kun voi se kannattaa tehdä.

    Siis häh! Meinaatteko okeasti ja tosissanne että tulkattu koodi olisi nopeampaa suorittaa kuin käännetty? En oikein usko.

    Äänestä

  • Anonyymi kirjoitti:

    Siis häh! Meinaatteko okeasti ja tosissanne että tulkattu koodi olisi nopeampaa suorittaa kuin käännetty? En oikein usko.

    Tehdäänpäs kokeilu. Kirjoittakaa ohjelma pythonilla joka mittaa kauanko kestää, kun loopissa muutetaan muuttujan arvo nollasta neljään miljardiin yksi numero kerrallaan.

    Tein C-kielellä toteutuksen, näette koodin niin voitte kokeilla omilla koneillanne. Minun i5 @ 2,2 GHz suoriutui karvan alle yhdeksässä sekunnissa, kuten kuvakaappauksesta näette.

    Veikkaan, ettei pythonilla mitenkään päästä noin nopeaan suoritukseen. Mutta kokeilen mielelläni jos joku kirjoittaa tuon saman pythonilla.

    Tässä kuvakaappaus lähdekoodista ja ohjelman ajosta:
    https://i.postimg.cc/cCYjjy6w/looppitesti.png

    ps.
    tuosta kuvasta jäi alusta pois näkyvistä kolme riviä lähdekoodia:

    #include <stdio.h>
    #include <time.h>

    void main(void)

    Äänestä

  • C:llä siis 9 sekuntia. Ei pitäisi yrittää päässä laskea.

    Äänestä

  • Anonyymi kirjoitti:

    Siis häh! Meinaatteko okeasti ja tosissanne että tulkattu koodi olisi nopeampaa suorittaa kuin käännetty? En oikein usko.

    Kyllä sinun pitäisi uskoa, se todellakin on monessa tapauksessa noin 2 kertaa nopeampi. Tein WHILE silmukan C:llä ja Pythonilla. Molempien suoritusaika mitattiin Linux järjestelmän omalla ulkoisella time-ajanotolla. Käyttämäni tiedostonimet olivat speed.py ja speed.c

    PYTHON ( speed.py )
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    i = 1
    while i < 4000000000: i = 1

    AJETTU komennolla: time pypy3 speed.py
    real 0m3,284s
    user 0m3,247s
    sys 0m0,020s

    -

    C ( speed.c )
    #include <stdio.h>
    int main(void) {
    unsigned long i = 1;
    while ( i < 4000000000) { i = 1; };
    }

    AJETTU komennolla: time speed
    real 0m6,684s
    user 0m6,681s
    sys 0m0,000s

    Kuten huomaat C kielinen While silmukka, vei yli kaksi (2) kertaa pitempään. Toivottavasti tämä ei nyt sitten poistu moderoinnin vuoksi.

    Äänestä

  • Anonyymi kirjoitti:

    C:llä siis 9 sekuntia. Ei pitäisi yrittää päässä laskea.

    Arvelinkin että timestampit on ylläpidolle liikaa.

    Pythonilla menis siis 9 minuuttia 16 sekuntia, ja C:llä 9 sekuntia.

    Pythonin luuppi:

    while (n < 4000000000):
        n =1

    Ja C:llä sama:

    while(n < 4000000000) {
        n ;
    }

    Äänestä

  • Anonyymi kirjoitti:

    Arvelinkin että timestampit on ylläpidolle liikaa.

    Pythonilla menis siis 9 minuuttia 16 sekuntia, ja C:llä 9 sekuntia.

    Pythonin luuppi:

    while (n < 4000000000):
        n =1

    Ja C:llä sama:

    while(n < 4000000000) {
        n ;
    }

    Noniin, eli siis neljään miljariin päästiin

    Python: yli yhdeksän minuuttia

    C-kieli: noin yhdeksän sekunttia



    C-kielellä tehty ohjelma siis pyörii todella paljon nopeammin kuin pythonilla tehty ohjelma. Se ei _tietentkään_ tee pythonista "huonoa" ohjelmointikieltä. Kaikki riippuu käyttätarkoituksesta.

    Selvää kuitenkin on, että silloin kun pitää tehdä tehokasta koodia, tarvitaan joku käännettävä kieli. Näitähän on tietysti monia, esim: C-kieli, C , Pascal, Rust...

    Äänestä

  • Anonyymi kirjoitti:

    Arvelinkin että timestampit on ylläpidolle liikaa.

    Pythonilla menis siis 9 minuuttia 16 sekuntia, ja C:llä 9 sekuntia.

    Pythonin luuppi:

    while (n < 4000000000):
        n =1

    Ja C:llä sama:

    while(n < 4000000000) {
        n ;
    }

    Kokeilin vielä Javascriptillä Node.js:n kanssa ja tulos oli 8 sekuntia. Eli se toimii suunnilleen yhtä nopeasti kuin C, vaikka onkin tulkattava kieli.

    Äänestä

  • Anonyymi kirjoitti:

    Tehdäänpäs kokeilu. Kirjoittakaa ohjelma pythonilla joka mittaa kauanko kestää, kun loopissa muutetaan muuttujan arvo nollasta neljään miljardiin yksi numero kerrallaan.

    Tein C-kielellä toteutuksen, näette koodin niin voitte kokeilla omilla koneillanne. Minun i5 @ 2,2 GHz suoriutui karvan alle yhdeksässä sekunnissa, kuten kuvakaappauksesta näette.

    Veikkaan, ettei pythonilla mitenkään päästä noin nopeaan suoritukseen. Mutta kokeilen mielelläni jos joku kirjoittaa tuon saman pythonilla.

    Tässä kuvakaappaus lähdekoodista ja ohjelman ajosta:
    https://i.postimg.cc/cCYjjy6w/looppitesti.png

    ps.
    tuosta kuvasta jäi alusta pois näkyvistä kolme riviä lähdekoodia:

    #include <stdio.h>
    #include <time.h>

    void main(void)

    4E9 luuppi kierrosta 9 sekuntiin, näyttävä suoritus, 1980-luvulla
    10000 for -- next silmukkaa oli varsinainen nopeustesti.

    Itse en käytä enää C:tä, mutta ajattelin kokeilla käytössäni olevilla
    FORTH-versiolla miten käy, FORTHilla oli hidas maine, kun ne olivat
    tulkkikoneita. mutta asiat muuttuvat.

    C ja FORTH ovat hyvin erilaisia kieliä, FORTH on pinokoneelle tarkoitettu,
    siksi aivan täsmällistä käännöstä on hankala tehdä, kun jo loopit toimivat
    eri periaatteella.

    Tein 4E9 kierroksisen BEGIN--UNTIL loopin, tosin sillä muunnoksella että
    käytössäni olevat versiot ovat pinoltaan 32 bittiä leveitä, joten suora osoitus
    pinossa ei onnistu, tai en ala kokeilemaan sitä. Siis tein loopin missä
    pyörii kaksi 2E9 looppia perätysten. Tästä saisi ainakin suuruusluokan.

    : ajo 1 begin 1 dup 2000000000 > until drop ;

    Koodi on tuossa ilman ajanottoa, pitäisi toimia yleisesti FORTHeilla, pinon
    leveys otettava huomioon.

    Käytössäni on kaksi konekielelle kääntävää versiota, VFX Forth ja
    SwiftForth.

    Tulokset ovat: 2X2E9 kierrosta.

    VFX Forth 1.966 sek. nopein aika.
    SwiftForth 2.8 sek.

    Miksi näin nopeita, koodi näyttää että koko operaatio tehdään pinossa.
    mitään muuttujia ei käytetä, pinokäsittely on erittäin nopeaa.

    FORTH on hyvin joustava kieli, tuon kokeen voisi tehdä usealla eri tavalla,
    voi olla että BEGIN--UNTIL on nopein, mitä pitänee kokeilla,

    Äänestä

  • Anonyymi kirjoitti:

    Lisätäänpä vielä C ei ole mikään risukasa, ei missään nimessä.

    Wikipedia sanoo näin:
    C on yleiskäyttöinen, imperatiivinen ja rakenteinen käännettävä tietokoneiden ohjelmointikieli, joka on levinnyt laajalle 1970-luvulta lähtien, jolloin Dennis Ritchie kehitti sen UNIX-käyttöjärjestelmää varten. Kielessä yhdistyvät koneenläheisyys ja korkean tason kielen ominaisuudet.

    "Kielessä yhdistyvät koneenläheisyys ja korkean tason kielen ominaisuudet."

    Tuo kuvaus sopii paremmin Delphiin kuin C -kieleen.

    Ja jos sekaan haluaa sotkea assembly -kieltä, niin assembly -kielen yhdistäminen Delphiin on helpompaa kuin assembly -kielen yhdistäminen C -kieleen. Syynä tähän C -kielen sekavat "constraints" -säännöt.

    Kumpikaan kieli ei suoraan tue CPU:n carry flagin käsittelyä, toki inline assemblyä käyttämällä se onnistuu helposti (Delhissä) tai vaikeasti (C -kielessä).

    Äänestä

  • Anonyymi kirjoitti:

    Python on myös parempi merkkijonojen käsittelyssä. Esimerkkinä vaikka tämä

    >>> str="Tämä on yöllä kirjoitettu"
    >>> str.find('ö')

    Pythonilla ei ääkköset ja öökköset ole mikään ongelma, mutta yritäppä C:llä löytää monesko merkki ö on str -merkkijonossa. C:ssä moni merkkijonon käsittelyyn tarkoitettu funktion ei toimi ollenkaan skandien kanssa, ja se syö C:n arvostusta niin pahasti, että jos pitää valita vain toinen niin se on Python.

    "Python on myös parempi merkkijonojen käsittelyssä. Esimerkkinä vaikka tämä

    >>> str="Tämä on yöllä kirjoitettu"
    >>> str.find('ö')"

    Samoin Delphissä:

    var
    S : String;
    n : Integer;

    begin

    S := 'Tämä on yöllä kirjoitettu';
    n := pos('ö', S);

    // muuttujassa n on nyt arvo 10, koska "ö" on tuon merkkijonon 10. merkki.

    end;

    Edes FreePascal / Lazarus ei yllä tässä samaan helppouteen kuin Delphi.

    Jos merkkijonossa olisi vaikkapa ä -kirjain ennen ö- kirjainta, niin FreePascalin pos() -funktio palauttaisi epäjohdonmukaiselta näyttäviä arvoja, tosin ne ovat loogisia (omalla tavallaan).

    Kas kun FreePascal käyttää UTF-8 -enkoodattua unicodea merkkijonojensa sisäisenä esitystapana, jolloin ä ja ö kirjaimet kuluttavat yli 1 tavu/kirjain, mutta kirjaimet a-z kuluttavat tasan 1 tavu/kirjain.

    Windowsissa käytetään usein UTF-16 -enkoodattua unicodea.

    Tässä ei suomen kielen ä ja ö -kirjainten kohdalla synny vastaavaa ongelmaa, mutta kokeilepa vaikkapa jotain näistä merkeistä (U+10840 .. U+1085F):

    https://en.wikipedia.org/wiki/Imperial_Aramaic_(Unicode_block)

    Niissä käy myös niin, että 1 merkki = 2 enkoodausyksikköä.

    Tässä enkoodausyksikkönä on 16-bittinen WORD.

    Kannattaa vielä huomata:

    JOS valitaan vaikkapa merkki U+10840, niin se korrekti (ja Unicode consortiumin hyväksymä) koodaustapa UTF-8 -esitystavalla kuluttaa 4 tavua.

    MUTTA:

    Väittäisinpä, että 99% - 100% GPL -lisensioiduista linux -käyttöjärjestelmässä ajettavista ohjelmista ei osaa koodata tuota merkkiä oikein, vaan koodaa sen virheellisesti 6 -tavuiseksi kummajaiseksi !

    Tällainen vaihtoehtoinen koodaustapa ei ole eikä ole koskaan ollutkaan Unicode consortiumin hyväksymä koodaustapa.

    MIKSI?

    Koska avoimen lähdekoodin fanaatikot (jotka linux -maailmassa tekevät päätökset, ikävä kyllä) eivät suostu uskomaan, että jos joki BMP (Basic Multilingual Page):hen kuulumaton merkki esitetään UTF-16 -enkoodauksella 2 peräkkäisellä surrogate -arvolla, niin tuota EI SAA koodata UTF-8:ksi niin, että koodaa kummankin surrogaten erikseen (mutta näin jokin linuxissa yleisesti käytetty kirjasto, olisiko libiconv tai jotain, toimii, vaikka se rikkoo törkeästi unicode -standardia) , vaan oikein on ensin purkaa nuo 2 peräkkäistä surrogate -arvoa 21 -bittiseksi UNICODE -koodiksi, ja vasta sitten enkoodata tämä 21-bittinen UNICODE -koodi UTF-8 -enkoodauksella, jolloin saadaan oikea ja standardinmukainen 4-tavuinen UTF-8 -enkoodattu esitysmuoto tuollaiselle merkille.

    Montakohan (kymmentä) vuotta vielä kuluu, ennekuin kovapäiset linux -fanaatikot tämän suostuvat tajuamaan, ja korjaamaan linux -kirjastonsa sellaiseksi, että se osaisi enkoodata myös Basic Multilingual Page:en kuulumattomat unicode -merkit UTF-8:ksi oikein eli standardinmukaisella tavalla ????

    Äänestä

"Käännösvaiheessa tehdään muistinvaraus, joka kestää maailman tappiin."

Tuolla tavalla joku väitti tuossa yläpuolella ettei varattu muisti vapaudu. Tein pienen ohjelman jolla asian voi itse testata. Sinulla pitää olla joku mistä näet vapaan muistin suorituksen eri vaiheissa.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void test( void ) {
char *str;
str = (char *) malloc(1500000000);
memset(str,'$',1500000000);
printf( "Muisti varattu!");
getchar( );
free(str);
printf( "Muisti vapautettu!");
getchar( ); }

int main () {
printf( "Seuraa muistin käyttöä!");
getchar( );
test();
return(0); }

Äänestä
  • Jollei ole mitään muuta niin Linuxin ( free ) komento näyttää käytetyn ja vapaan muistin. Joudut vain avaamaan kaksi komentokehoiteikkunaa, toisessa ajat tuon testin, ja toisessa luet muistin tilan.

    Äänestä

Mikähän lie kun ketjulistaus ei päivity. 18 min odottelin ketjulistauksen päivittymistä, ei tullut.

Äänestä
  • Tämä ketjulistauksen päivityskäytäntö on varmaankin muutettu noiden sämppäreiden vuoksi.

    Äänestä

  • Anonyymi kirjoitti:

    Tämä ketjulistauksen päivityskäytäntö on varmaankin muutettu noiden sämppäreiden vuoksi.

    Ei hyvä tällä tavalla.

    Äänestä

Basick kieli on helpompaa.

10 PRINT "SEPPO"
20 GOTO 10

RUN

Äänestä
  • Tai sama C-kielellä:

    #include <stdio.h>

    void main(void)
    {
    int i = 1;

    while(i)
    {
    printf("SEPPO\n");
    }

    }

    Kääntäminen:
    gcc seppo.c -o sepotin
    Ajaminen:
    ./sepotin

    Tosin, myös C-kielessä on goto-käsky olemassa. Sen käyttäminen vaan on kamalan rumaa.

    Äänestä

Ylläpito hei, olisitteko niin hyvä ja poistaisitte nuo harjaavat viestit. KIITOS

Äänestä
  • Automaatti poistelee nyt vääriä viestejä. Nuo ilkeilyt täältä joutaa pois.

    Äänestä

  • Kiitosta paljon.

    Äänestä

Sinä joka annoit näytteen BASIC koodista, viestisi poistui varmaan siksi, että se sisälsi isoja kirjaimia liikaa suhteessa viestin pituuteen.

Äänestä
  • S24-nörtit kehittelemässä sääntöjä. Toivottavasti pääsevät joskus tekemään oikeaakin laindäädäntöä.

    Äänestä

  • Anonyymi kirjoitti:

    S24-nörtit kehittelemässä sääntöjä. Toivottavasti pääsevät joskus tekemään oikeaakin laindäädäntöä.

    Kyllä minuakin harmittais :)

    Äänestä

  • Anonyymi kirjoitti:

    Kyllä minuakin harmittais :)

    C on yksi vaikeimmista kielistä kirjoittaa oikein ensi yrittämällä. Itse kirjoittaisin tuon while(i) silmukan ilman i:tä, eli for(;;) muistamalla, että for-silmukan kaikki parametrit ovat optionaalisia. Kielen huono puoli tosiaan on se, että se mahdollistaa huonon koodin kirjoittamisen vähän turhankin helpolla ja tästä syystä joutuu käyttämään linteriä ja -Wall yms. tarkistuksia. Ehkäpä pitäisi sitten opetella jokin parempi kieli, vaikka Haskell - tai sitten ei..

    Äänestä

Ei onnistu vastata, moderointi poistaa tänään kaikki viestit, mitä yrittää kirjoittaa. Kumma että eilen sai kirjoitettua ja kaikki viestit jäivät näkymään. Taas rupeaa korpeemaan tämä suomi24 sivuston moderointi. Mailman huonoin sivusto.

Äänestä

Kumma että noinkin nyrjähtänyt kieli on saanut merkittävän aseman eikä esim työsuojelutarkastaja ole puuttunut asiaan.

Äänestä

Silmukkatesteissä kannattaa huomata että kääntäjät ja tulkit optimoi niitä lennossa jos huomaavat että ovat dummeja. Kääntäjät/tulkit tekee nykyään ihmeellisiä asioita.

Kyllä C-kielellä tehty ja käännetty koodi on paljon nopeampaa kuin Pythonilla.
MUTTA Pythoniin on loistavia kirjastoja jotka on nopeita. Lienevät kirjoitettu C:llä.

Jos Python olisi nopeampi ja tehokkaampi kuin C niin kaippa Linux olisi kirjoitettu uudelleen Pythonilla ...

Äänestä

Perustiedot ohjelmoinnista pitäisi kuitenkin tietää mikä oli A-kieli tietystikin Assembly, sitten tuli B-kieli, sitten tuli C-kieli joka on hallitseva aina tehokkaissa sovelluksissa.

Äänestä

Mikä tahansa ohjelmointikieli on helppoa oppia jos on ymmärrystä logiikasta ja loogisesta päättelystä että matemaattisia taitoja.

Ohjelmonti vaatii myös pitkäjännitteisyyttä.

Itse en kuitenkaan C kieltä ihan ensimmäisenä lähtisi opiskelemaan, ainakin jos tarkoitus on itsekseen kotona opiskella ja oppia.

Itse suosittelisin:

1) Opettele bash-skriptaus ensin (Linux)
2) PHP tai Python
3) Nyt vasta C, tai vähän PERLiä ensin

Äänestä
  • Tuosta ensimmäisestä kohdasta olen täysin samaa mieltä. On ehdottoman tärkeää tuntea oma käyttöjärjestelmänsä mahdollisuudet.

    Pythonissakin os -kirjasto on pelkästään käyttöjärjestelmän omien mahdollisuuksien soveltamista, ellei järjestelmäänsä tunne on ihan turha kirjoittaa riviä:

    import os

    Äänestä

Kyllä, pythoniin tulee paljon import:ia ihan sen mukaan että mitä tarvitsee tehdä, aivan kuten C -kielessä tulee #include:ja, ja C:ssä pitää käytännössä aina kuitenkin laittaa se kuuluisa #include "stdio.h"....

Äänestä

Sen enempää asiaan tutustumatta kommentoin vain että jos AP:n tehtävänannossa on tarkoitus C -kielellä etsiä jonkin merkki merkkijonosta, niin se tapahtuu funktiolla 'strchr'.

Ja näitä funktioita C-kielessä riittää, ja ne kaikki vaan pitää opetella ja muistaa. Kyse on ihan samasta asiasta kuin että opettelisi vieraita kieliä.

Omista korkeakouluopinnoista Yliopistolla muistan että siellä proffa oli antanut laskarit kotiin, ja minähän tein työtä käskettyä. Sitten luennolla proffa alkoi selittämään että 'yksi näistä tehtävistä näköjään osoittautui aika vaikeaksi kun siitä tuli niin paljon kysymyksiä sähköpostilla'.

Ihmettelin vaan, ja sitten tavalliseen tapaan proffa tuli tarkistamaan kaikkien laskarit, ja ihmetteli ja pyöritteli päätään että mitä kummaa oikein olin tehnyt. Selitin vain että 'tehtävän anto oli tehdä olio joka luo olioita'...

Proffa vaan pyörittelee päätään ja toteaa että, 'noh, olio-ohjelmointiahan tässä tehdään joka tapauksessa niin kyllä se sinulla hanskassa alkaa olemaan', ja kaikki laskarit kuitattiin tehdyksi ja hyväksytyksi.

Eli siis tosielämässä, niin opiskellessa kuin työelämässä tulee tapauksia jotka voi joskus olla vähän hankalasti hahmotetavissa, ja sitten näkee välillä myös aika 'mienekiintoisia' virityksiä mutta, no, oppia ikä kaikki...

Äänestä
  • Eli et tiedä C -ohjelmoinnista mitään.

    Äänestä

  • Anonyymi kirjoitti:

    Eli et tiedä C -ohjelmoinnista mitään.

    ....ja väitteesi perustuu mihin faktaan....?

    Äänestä

Hieman vaikeampi kuin Fortran.

Äänestä

Justiinsa niin tuo että niin tytöt haluavat tietokoneensa tekemään mitä itse haluavat, joka olisi mukavaa..

Äänestä

Tuollainen on aika hauskaa jos osaa ohjelmoida grariikkakiihdyttimien ominaisuuksia ja shader, blader, light fodus what ever, mutta niin tee vahingossa joku hassu grafiikkakiihdytiin piirää ruudull3 :DS

Äänestä

Kyllä C-kielen oppii jos halua on, sillä on hyvä tylsistyttää aivonsa
töissä.
Mutta jos haluat älyllistä seikkailua ohjelmoinnin parissa, parempia
vaihtoehtoja on tarjolla.
En tarkoita eksoottisia aivojen nyrjäyttäjiä, vaan jotain sellaista jolla
voi rakentaa hyödyllistä, vaikka mikrokontrolleri avaruusluotaimeen.

Voisin melkein suositella forth-nimistä kieltä, ei fortran, se on toinen juttu.
Siinä missä c:n pino on piilotettu kääntäjän käyttöön, forthissa se näkyvillä
ohjelmoijan käytössä, sen kautta hoidetaan kaikki parametri liikenne.
Tämä tuntuu tutulta hp:n laskimista, siellä on samanlainen pinosysteemi
ja käänteinen puolalainen logiikka, mikä yksinkertaistaa laskemista.

Forth on eräs vaihtoehto pinokoneiden kieleksi, se hyviä puolia on nopea
ohjelman rakentaminen, tiivis koodi, jopa konekieltä tiukempaa,
avaruusluotaimet pitävät siitä, ohjelmien testaus ja debuggaus erittäin
yksinkertaista, kääntäminen hyvin nopeaa, ei linkkeriä.

Haitaksi voisi laskea koodin lukemisen vaikeutta, näyttää kryptiseltä,
koska siinä ei yleensä näy pinon sisältöä, vain funktiot jotka käsittelevät pinoa.
Koodi on vain funktioluetteloa erotettuna välilyönnillä, joten syntaksi on
erittäin yksinkertaista.
Forthia on sanottu ohjelmoijan vahvistimeksi, hyvä ohjelmoija tekee hyvää
koodia, huono saa aikaan hirvittävää koodia, c tarjoaa runsaasti köyttä mihin
voi hirttäytyä, forth tarjoaa säkillisen myrkkykäärmeitä ja liekinheittimen.

Kun tutustuin c-kieleen, vaikutelmaksi tuli "ai näin se tehdään c-kielellä", ja
yritin ottaa selvää risuaidasta.
Forthilla voi käyttää luovuutta, kääntäjä ei pakota ohjelmoijaa raameihinsa,
forthilla olen kokenut aitoa luomisen riemua, "ai näin sen voi tehdä" tyyliin.
Forthilla voit laajentaa kääntäjää, jos haluat eri tavalla käyttäytyvän muuttujan
voit tehdä sen, se on sitten erottamaton osa kieltä.

Koodi esimerkkinä yksinkertainen, jopa huvittava, ehkä käyttökelpoinen.

: 1 1 ;
: on kääntäjän käynnistysmerkki.
1 on funktion nimi, ei aivan funktio, kuten perinteisissä kielissä.
1 toiminta joka suoritetaan, pinossa oleva numeroa kasvatetaan yhdellä,
pinossa 5 1 jälkeen 6.
; kääntäjälle lopetusmerkki.

Jos aikaisemmin on joutunut käyttämään 1 , välimerkki välissä, tuon
jälkeen voi käyttää 1 , se on tullut uudeksi osaksi kieltä.



Eri kielistä on hyvä sivu, googlatkaa .
Rosettacode.org
Sieltä sitten Explore.

Äänestä

Tämän ketjun pilasi moderointi ja rollit yhdessä toisiaan tukien, jalkoihin jäi python taitajat.

Äänestä

C-kielen formaali on tekninen, ja teknisenäkin osittain matemaattisesta merkintätavasta poikkeava.
Esimerkiksi Basic-kielen formaali on kielellinen ja matemaattista merkintätapaa noudattava.

Ohjelmointi on myös ajattelua. Onko järkevää ajatella teknisen formaalista kun voi ajatella kielellisesti? Pidemmän päälle tekninen formaali aiheuttaa aina vain monimutkaisempia rakennelmia, jotka ikävä kyllä johtavat lopulta tuhoon. Katsokaa vaikka nykyaikaisten internetsivujen "koodia".

Äänestä
  • Tuosta ymmärsin hyvin vähän, tai en sitäkään.

    C on yleiskäyttöinen, yksiselitteisiin komentoihin perustuva, käännettävä, tietokoneiden ohjelmointikieli. Kun taas Basic on aloittelijalle sopiva ohjelmointikieli.

    Äänestä

  • Anonyymi kirjoitti:

    Tuosta ymmärsin hyvin vähän, tai en sitäkään.

    C on yleiskäyttöinen, yksiselitteisiin komentoihin perustuva, käännettävä, tietokoneiden ohjelmointikieli. Kun taas Basic on aloittelijalle sopiva ohjelmointikieli.

    Onko ruotsin kieli helppo oppia? On jos haluaa ja jaksaa opiskella.

    Onko saksan kieli helppo oppia? On, jos jakssa opiskella, mutta helpompaa on jos osaa jo ruotsia.

    Onko japanin kieli helppo oppia? On, jos jaksaa opiskella. mutta suomalaiselle kaikista helpointa koska lausuntatapa on sama suomenkielen kanssa.

    Kirja käteen ja lukemaan. Niin minäkin tein, aikana jolloin ei ollut nettiä muuten kun modeemilla käytettävissä...

    Äänestä

Kun löytää mielekiintoisen kohteen rakentaa, ei sitä tehdessä kielen vaikeus tule mieleen.

Äänestä

Taitaa jankkaava toksinen koodari olla / c:stä

Äänestä

Ota Microsoftilta joku Visual C++ ohjeistus voi toimia paremmin vaikka:
https://learn.microsoft.com/en-us/visualstudio/get-started/visual-studio-ide?view=vs-2022

Itselläni oli melkein pakko hommata uusi kone joka olisi kuin peruskäyttäjän juttu kun OpenGL-juttuja ja pitää saada sellaisia että Stand-Alone -juttuja niin voi testata sellaisella miten toimii eikä ole mitään puuttuvia Dillejä eli DLL-tiedostojakaan.

OpenGL, niin joo Silicon Graphics, aina tulee vastaan tuo Hardware Acceleration noissa grafiikkajutuissa:
https://en.wikipedia.org/wiki/Silicon_Graphics

Äänestä

Mikä on bussikuski?= Bus Dricewr listaa kaikki laitteet jättimäinen lista mitä laitteita on emolevyllä ja kaikki heh, oikeasti tuollainen pyyntö.. assemblyäkin koodia, hirviölista kaikista emolevyllä olevista tuotteista.

Äänestä

Ketjusta on poistettu 10 sääntöjenvastaista viestiä.

Kommentoi aloitusta


Anonyymi kirjoitti:

Törmäsin verkossa ärsyttävään opastukseen. ( https://s7.gifyu.com/images/strchr2.png ). Tuossahan opastetaan, selvittämään, onko joku merkki merkkijonossa. Katso kuvaa ja yritä tajuta kuinka tuota soveltaisit omassa ohjelmassasi.

Tein samasta asiasta itse esimerkin, jossa ei ole mukana mitään mikä ei 100% liity asiaan ( https://s7.gifyu.com/images/strchr1.png ). Ja tästä saattaa jo aloittelijakin keksiä kuinka asia pitää hoitaa. Lisätään tähän vielä että tuo verkosta löytynyt ohje on vielä englannin kielinen, joka jo yksinään saattaa estää asian ymmärtämisen.

Niin, onko C helppo oppia?

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