Miten tällainen ohjelma tehdään?

Aloittelijaohjelmoija

Miten tehdään ohjelma, joka kysyy 20 lukua ja järjestää ne suuruusjärjestykseen taulukkoon?

20

1590

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Aloittelijaohjelmoija

      Unohtui kieli eli C-kielestä on kysymys.

    • Johnnie83

      Tutustumalla C-kirjallisuuteen..

      • Aloittelijaohjelmoija

        Selailin jo Kari Sirpiön C-kieli kirjaa, joka on kuulemma hyvä kirja aloittelijalle, mutta reilun 300 sivun läpikäymiseen rivi riviltä menee aika paljon aikaa, kun ei yhtään tiedä mitä etsiä. Olisiko vinkkejä mihin asioihin kannattaisi tutustua jotta saisi homman hoidettua?


      • teuro

        #include //Syötteet
        #include //Periaatteessa taulukko
        #include //Algoritmit

        using namespace std; //Tämä on vähän järeää, mutta ajaa asian.

        int koko = 20; //Lukujen määrä
        int luku; //Kysyttävä luku

        vector Luvut; //Vectorin alustus


        int main(){

        for(int a = 0; a < koko; a ){
        cout -1; b--){
        cout


      • sen verran
        Aloittelijaohjelmoija kirjoitti:

        Selailin jo Kari Sirpiön C-kieli kirjaa, joka on kuulemma hyvä kirja aloittelijalle, mutta reilun 300 sivun läpikäymiseen rivi riviltä menee aika paljon aikaa, kun ei yhtään tiedä mitä etsiä. Olisiko vinkkejä mihin asioihin kannattaisi tutustua jotta saisi homman hoidettua?

        että kannattaa lukea se koko kirja kannesta kanteen. Minäkin olen ohjelmoinut jo vuoden ja kun jpulu lahjaksi sain Päivi Hirtasen C ka olio-ohjelmoiniti, niin luin sen kannesta kanteen vaikka tiesin jo suurimman osan asiasta.


    • Yleisellä tasolla

      Tehtävä ei ole vaikea kokeneelle ohjelmoijalle. Opetustarkoituksessa tekisin sen näin perusteellisesti.

      1) Kirjoittaisin tehtävän vaatimukseen tarkasti talteen. Mitä tyyppiä luvut ovat? Miten taulukon sisältö pitää tulostaa? Miten virhetilanteet käsitellään?

      2) Muodostaisin yleisen rungon suomeksi. Se olisi kuvaus siitä, miten ohjelman suoritus kulkee. Tässä tapauksessa se vaikuttaa aika suoraviivaiselta.

      3) Valmistelisin erinäisiä koesyötteitä, joilla testattaisiin ohjelman oikeaa toimintaa ja toipumista virhetilanteista. Aiemmissa vaiheissa esiin tulleet kohdat tulisi kaikki testata huolellisesti.

      4) Kirjoittaisin ohjelman alustavan version.

      5) Testaisin sitä suunnittelemieni testien avulla.

      6) Korjaisin mahdollisia virheitä kunnes kaikki testit suoritetaan kunnialla.

      7) Ohjelma olisi valmis.

      Näin minä tekisin. Eri vaiheissa olisi hyvä katsoa kurssimateriaalista tai muista lähteistä C-kielen ominaisuuksia, joilla eri toiminnot voisi toteuttaa. Tietojen järjestämiseen liittyviä algoritmejä on tutkittu pitkään ja alasta on laaja kirjallisuus. Luottaisin siinä luultavasta johonkin hyvin tuntemaani perusalgoritmiin. Olettaisin, että kurssilla on opetettu ainakin yksi sellainen.

      Kaiken tämän jälkeen menisin kahville tyytyväisenä itseeni.

      • Aloittelijaohjelmoija

        Itse asiassa kurssilla ei opetella mitään kunnolla vaan tarkoitus on vain käydä läpi mahdolisimman paljon asiaa lyhyessä ajassa. Jokainen asia käydään läpi pintapuolisesti kerran. Mitää algoritmeja en tunne kunnolla, enkä edes tiedä mitä algoritmi tarkoittaa C-kielessä. Vaikea lähteä liikkeelle kun ei tiedä yhtään mistä lähtisi liikkeelle. No siis kai voisin jotenkin määritellä luvut tyyliin luku1, luku 2...luku20 ja sitten 20 eri if lauseella kokeilla saada jotain aikaan, mutta siinä nyt ei taida olla mitään järkeä. Asian varmaan voisi tehdä järkevämminkin Millaisiin juttuihin kannattaisi tutustua? Mitä vois hyödyntää tehtävää tehdessä?


    • Aloittelijaohjelmoija

      Löysin netistä viitteitä qsort toiminnosta C-kielessä. Mahtaisiko se toimia tuossa lajitteluhommasta vai löytyykö parempia? Jos qsort toimii niin miten ihmeessä sellaista käytetään kun en ole koskaan moisesta ennen kuullut ja netistäkään ei löytynyt mitään käyttöohjeita? Tuossa C-kielen kirjassa jonka omistan, kerrotaan siitä kyllä jotain, mutta en tajua selityksestä sen vertaa, että osaisin nykyisillä taidoillani tietoa soveltaa. Mahtaisiko jostain löytyä oikein esimerkkejä qsortin käytöstä?

      • ...

        Kuplalajittelu olisi varmaan aloittelijalle helpompi toteuttaa.


    • Koodi Kalle

      #include
      #include

      #define LUKUJA 20


      void kysy(int *taulukko, int maara)
      {
         int i;

         for (i = 0; i < maara; i )
         {
            printf("Anna %i. luku: ", i 1);
            scanf("%d", &taulukko[i]);
         }
      }


      void jarjesta(int *taulukko, int maara)
      {
         int i, j, k;

         for (i = 0; i < maara; i )
         {
            for (j = 1; j < maara; j )
            {
               if (taulukko[j] > taulukko[j-1])
               {
                  k = taulukko[j - 1];
                  taulukko[j - 1] = taulukko[j];
                  taulukko[j] = k;
               }
            }
         }
      }


      void tulosta(int *taulukko, int maara)
      {
         int i;

         for (i = 0; i < maara; i )
            printf("%d. suurin numero: %d\n", i 1, taulukko[i]);
      }


      int main(int argc, char *argv[])
      {
         int taulukko[LUKUJA];

         kysy(taulukko, LUKUJA);
         jarjesta(taulukko, LUKUJA);
         tulosta(taulukko, LUKUJA);
         
         return 0;
      }

      • Koodi Kalle

        "Anna %i. luku: " => "Anna %d. luku: "


      • noilla
        Koodi Kalle kirjoitti:

        "Anna %i. luku: " => "Anna %d. luku: "

        %i ja %d edes on? Minä käytän inttien kanssa aina %i.


      • dspieg
        noilla kirjoitti:

        %i ja %d edes on? Minä käytän inttien kanssa aina %i.

        nykyisillä kääntäjillä sama asia


    • ceccy

      #include
      #include

      #define LKM 5

      int vertailija(const void *ptr1, const void *ptr2)
      {
      float luku1 = *((float *) ptr1);
      float luku2 = *((float *) ptr2);
      if (luku1 < luku2) return -1;
      else if (luku1 > luku2) return 1;
      else return 0;
      }

      int main(void)
      {
      float lukutaulukko[LKM];
      int i;
      for (i = 0; i < LKM; i ) scanf("%f", &lukutaulukko[i]);
      qsort(lukutaulukko, LKM, sizeof(float), vertailija);
      for (i = 0; i < LKM; i ) printf("%f\n", lukutaulukko[i]);
      return 0;
      }

    • Aloittelijaohjelmoija

      Olen aloittanut kokeilemaan ohjelman tekemistä, mutta en ole saanut juuri mitään aikaan. Bubble sorttia kuulemma olisi hyvä käyttää, mutta en vain tajua miten se toimii. En tajua myöskään miten lukuja saa luettua taulukkoon, jotta bubble sort voisi ne jätjestää. Saisiko jotain vinkkejä miten jatkaa?

      Tässä toimimaton yritykseni ratkaista ongelma:

      #include
      #include

      int main(int argc, char *argv[])
      {
      int luvut [20];
      int i;
      int k;
      int luku1;
      int luku2;
      int luku3;
      int luku4;
      int luku5;
      int luku6;
      int luku7;
      int luku8;
      int luku9;
      int luku10;
      int luku11;
      int luku12;
      int luku13;
      int luku14;
      int luku15;
      int luku16;
      int luku17;
      int luku18;
      int luku19;
      int luku20;
      int apu;
      printf("Anna luku\n");
      scanf("%i", luku1);
      printf("Anna luku\n");
      scanf("%i", luku2);
      printf("Anna luku\n");
      scanf("%i", luku3);
      printf("Anna luku\n");
      scanf("%i", luku4);
      printf("Anna luku\n");
      scanf("%i", luku5);
      printf("Anna luku\n");
      scanf("%i", luku6);
      printf("Anna luku\n");
      scanf("%i", luku7);
      printf("Anna luku\n");
      scanf("%i", luku8);
      printf("Anna luku\n");
      scanf("%i", luku9);
      printf("Anna luku\n");
      scanf("%i", luku10);
      printf("Anna luku\n");
      scanf("%i", luku11);
      printf("Anna luku\n");
      scanf("%i", luku12);
      printf("Anna luku\n");
      scanf("%i", luku13);
      printf("Anna luku\n");
      scanf("%i", luku14);
      printf("Anna luku\n");
      scanf("%i", luku15);
      printf("Anna luku\n");
      scanf("%i", luku16);
      printf("Anna luku\n");
      scanf("%i", luku17);
      printf("Anna luku\n");
      scanf("%i", luku18);
      printf("Anna luku\n");
      scanf("%i", luku19);
      printf("Anna luku\n");
      scanf("%i", luku20);
      for(k=0; k= 0; i--)
      for (j = 1; j a[j]) {
      temp = a[j-1];
      a[j-1] = a[j];
      a[j] = temp;
      }
      Mitä tuossa mahtaa tapahtua? Mitkä noista on määriteltäviä juttuja ja mitkä jotain muuta? Mitä nuo i ja j ovat? Miten luvut pitää kysyä käyttäjältä, jotta ne pystyy järjestämään tuolla?

      • asölfdasköl

        oot haukkaamassa liian suurta palaa. opettele ensin muuttujien ja taulukon käyttö ja ohjelmavuon ohjauskomennot eli ne ihan perusperusjutut ja yritä sitten uudelleen. voi tuntua paljon helpommalta.


      • vaihtoehto

        #define MAARA 4
        #include
        int comp(int* arg1, int* arg2)
        {
           return *arg1 > *arg2;
        }
        int main(void)
        {
           int luvut[MAARA];
           int i;
           for(i = MAARA; i ; --i){
              printf("Anna luku\n");
              scanf("%i", &luvut[i-1]);
           }
           qsort(luvut, MAARA, sizeof(int), comp);
           for(i = 0; i < MAARA ; i)
              printf("%i\t", luvut[i]);
           return 0;
        }


    • Aloittelijaohjelmoija

      Tällä hetkellä olen tämän näköisessä vaiheessa:
      #include
      #include

      int main(int argc, char *argv[])
      {
      int luvut [20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
      int i;
      int k;
      int apu;
      printf("Anna luku\n");
      scanf("%i", &luvut[0]);
      printf("Anna luku\n");
      scanf("%i", &luvut[1]);
      printf("Anna luku\n");
      scanf("%i", &luvut[2]);
      printf("Anna luku\n");
      scanf("%i", &luvut[3]);
      printf("Anna luku\n");
      scanf("%i", &luvut[4]);
      printf("Anna luku\n");
      scanf("%i", &luvut[5]);
      printf("Anna luku\n");
      scanf("%i", &luvut[6]);
      printf("Anna luku\n");
      scanf("%i", &luvut[7]);
      printf("Anna luku\n");
      scanf("%i", &luvut[8]);
      printf("Anna luku\n");
      scanf("%i", &luvut[9]);
      printf("Anna luku\n");
      scanf("%i", &luvut[10]);
      printf("Anna luku\n");
      scanf("%i", &luvut[11]);
      printf("Anna luku\n");
      scanf("%i", &luvut[12]);
      printf("Anna luku\n");
      scanf("%i", &luvut[13]);
      printf("Anna luku\n");
      scanf("%i", &luvut[14]);
      printf("Anna luku\n");
      scanf("%i", &luvut[15]);
      printf("Anna luku\n");
      scanf("%i", &luvut[16]);
      printf("Anna luku\n");
      scanf("%i", &luvut[17]);
      printf("Anna luku\n");
      scanf("%i", &luvut[18]);
      printf("Anna luku\n");
      scanf("%i", &luvut[19]);

      for(k=0; k

      • Johnnie83

        Mitä jos joudut lukemaan 100 numeroa 20 sijaan, kirjoitatko sitten 80*2=160 riviä lisää vai olisiko olemassa parempi keino?


      • juippi2

        Mutta se koodihan on jo toimiva. k, i ja apu ovat tilapäisiä muuttujia. Niiden tilalla voisi yhtä hyvin olla f,g ja h. Voit tulostaa näytölle taulukon sisällön seuraavasti:
        for(i = 0; i < 20 ; i)
        printf("%i\t", luvut[i]);

        Tässä näytti olevan qsort -vaihtoehto, jos tuo näyttää ylivoimaiselta:
        http://keskustelu.suomi24.fi/show.fcgi?category=108&conference=4500000000000140&posting=22000000024450206

        Suosittelisin lukemaan siitä kirjasta vielä mitä ne muuttujat ja taulukot ovat. Varmasti siinä on neuvottu vähintäänkin ne.


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

    Luetuimmat keskustelut

    1. Moikka rakas

      Oon miettinyt meidän välistä yhteyttä viime aikoina. En ihan osaa pukea sanoiksi, mitä kaikkea tunnen, mutta halusin vaa
      Ikävä
      61
      15147
    2. Mitä tapahtunut

      Poliiseja monta autoa+panssariauto Porista kpäähän päin tänään klo n.20 kuka hurjistunut ?
      Kankaanpää
      27
      3184
    3. HS: Kuka vielä uskaltaa mennä sairaalan ensiapuun?

      https://www.hs.fi/mielipide/art-2000011212025.html Tässä on hyvin ajankohtainen mielipidekirjoitus koskien Malmin sairaa
      Maailman menoa
      267
      2410
    4. Gallup: kaivattusi syntymävuosi

      Minä vuonna kaipaamasi henkilö on syntynyt?
      Ikävä
      128
      1743
    5. Ökyrikas Kurkilahti mussuttaa veroistaan

      Pakeni aikoinaan veroja Portugaliin mutta joutui palaamaan takaisin kun Suomi teki verotussopimuksen Portugalin kanssa.
      Maailman menoa
      127
      1463
    6. Yhdysvalloissa työllisyys paranee, Suomessa työttömyys kasvaa, missä vika?

      Miten tämä on mahdollista että 177 000 uutta työllistä tuli USAssa yhdessä kuukaudessa, vaikka Trump on ruorissa? Orpon
      Maailman menoa
      354
      1383
    7. Jos tämän vaan sulkee ja avaa 5 vuoden päästä

      Täällä on luultavasti edelleen näitä ihan samoja juttuja. On kuin kauniit ja rohkeat samat jutut junnaa. Heips. 👋🏻 E
      Ikävä
      10
      1203
    8. Missäpäin,,,

      Lapuaa tapettu ihminen viime yönä ? Hurjaa touhua nykymeno täällä...
      Lapua
      12
      1105
    9. Onko PS kaaoksessa?

      Kuinka pahasti kulissit heiluu? Tulenarka aihe? Kyllähän vaalitappio toisensa jälkeen on vakava paikka, mutta jospa P
      Perussuomalaiset
      74
      936
    10. Mitähän ne katseet merkitsee

      Kun et saa sanaa suustasi.
      Ikävä
      115
      895
    Aihe