Generovanie 50 cisel a vypis dvoch prvkov

Programovacie jazyky, rady, poradňa...
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa maetoo »

Zdravim.
Riešim zadanie. Mám spraviť pole s 50 nahodnymi prvakami. To som spravil.
V druhej časti treba vybrať prvok, ktorý sa v poli nachadza aspoň dvakrát.
Ako by ste riešili vy tuto druhu časť? Dajte navrhy.

Môj kód, ktorý som zatiaľ napísal:

Kód: Vybrať všetko

/*
Zadanie:
Vygenerujte 50 prvkov pola a vyberte prvok, ktorý sa v poli nachádza aspon dvakrat.
*/

//Pouzite hlavickove subory
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //Hlavickovy subor pouzity na nahodne generovanie cisel z casu

#define M 50 //Definovany nazov polia a rozsah polia

int main()
{
    int prvky; //Zadefinovanie typ premennej pre prvky
    int i; //Zadefinovanie typ premmenej pre i pouzitej v cykle for
    prvky=0; //Premenna prvky nastavena na nulu
    srand(time(NULL)); //Vynulovanie casu

    printf("Vygenerovane cisla:\n" //Vypise pouzivatelovi na monitor: Vygenerove cisla
           "\n"); //Vytvori medzeru

    for(i=0; i<M; i++) { //Cyklus pre vygenerovanie 50 nahodnych cisel
        prvky=100+rand()%(1000-100+1); //Prikaz na generovanie nahodnych cisel od 100 do 1000
        printf("%d\t", prvky); //Zobrazi uzivatelovi 50 vygenerovanych cisel
    }

    return 0;
}

BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa BX »

Máš spraviť pole, ale žiadne pole tam nemáš. Dorob ho tam a potom môžeme riešiť druhú čast :)
http://kmlinux.fjfi.cvut.cz/~fabiadav/c ... yku-c/pole
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa maetoo »

BX napísal:Máš spraviť pole, ale žiadne pole tam nemáš. Dorob ho tam a potom môžeme riešiť druhú čast :)
http://kmlinux.fjfi.cvut.cz/~fabiadav/c ... yku-c/pole
Dúfam, že už som dobre opravil zdrojový kód a vytvoril som pole.
Ako by ste teraz riešili druhu časť?

Upraveny kód:

Kód: Vybrať všetko

//Pouzite hlavickove subory
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //Hlavickovy subor pouzity na nahodne generovanie cisel z casu

#define M 50 //Definovana velkost poli

int main()
{   int prvky[M]; //Zadefinovanie typ premennej pre prvky
    int i; //Zadefinovanie typ premmenej pre i pouzitej v cykle for

    srand(time(NULL)); //Vynulovanie casu

    printf("Vygenerovane cisla:\n"  //Vypise pouzivatelovi na monitor: Vygenerove cisla
           "\n" //Vyvori medzeru
           );

    for(i=0; i<M; i++) { //Cyklus pre vygenerovanie 50 nahodnych cisel
        prvky[i]=100+rand()%(1000-100+1); //Prikaz na generovanie nahodnych cisel od 100 do 1000
        printf("%d\t", prvky[i]); //Zobrazi uzivatelovi vybenerovane cisla
                       }
    return 0;
}

BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa BX »

Veľmi dobre :)
No a teraz ako nájsť prvky, ktoré sú tam aspoň dva krát? Vieš si vymyslieť aspoň slovný popis riešenia?
Predstav si, že pracuješ v knižnici a dostaneš na starosť regál plný kníh. Tvoja úloha je nájsť knihy, ktoré sú tam viac krát. Ako to urobíš?
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa maetoo »

Možno zbytočne dlhe riešenie, ale prve čo mi prišlo na rozum bolo, že knihy by som si abacedne zoradil.
Po abedecnom zoradeni by som sa pozrel na názvy knih.
Názvy knih, ktore by sa nachadzali viackrát by som zobral, aby tam bola iba jeden krat.

Podobne by som to spravil asi s číslami. Zoradil by som ich napr.od najmenšie po najväčšie.
Potom prechadzal každe číslo rad radom. Číslo, ktore by sa nachadzalo dva a viackrát by som vypisal uživatelovi na monitor,
pokiaľ by sa žiadne číslo nevyskytovalo 2 a viackrat, vypisal by som užvatelovi, že žiadne taketo číslo v poli sa nenachadza.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa BX »

To je dobré riešenie. Prvky vieš zoradiť napríklad takto http://algoritmy.net/article/3/Bubble-sort

Ďalšie riešenia:
1) Prejdem celý regál knihu za knihou. U každej knihy sa zastavím a pozriem sa, či ďalej v regále je kniha s rovnakým názvom. Ak nájdem duplicity, vyhodím ich.

2) Prejdem celý regál knihu za knihou a každú si 1) skontrolujem v zozname, 2) ak ju už v zozname mám, je tam viac krát, ak nie, napíšem ju do zoznamu a pokračujem.

Skús to urobiť s tým zoradením, to je ľahké :)
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa harrison314 »

Vynimocne nesuhlasim s BX-om, bouble-sort a nasledne porovnavnie v poli je podla mna aj na zlozitost, pochopenie a implementaciu zlozitejsie, ako hlupe hladanie zhod v poli (ktore ide spravit v kvadratickej zlozitosti).
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa BX »

Vôbec neriešim zložitosti. Na to riešenie prišiel sám, tak by to tak mal aj urobiť.
maetoo
Light Star
Light Star
Príspevky: 263
Registrovaný: 24 okt 2009, 20:05
Bydlisko: Trenčín

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa maetoo »

BX napísal:Vôbec neriešim zložitosti. Na to riešenie prišiel sám, tak by to tak mal aj urobiť.
Keď som prišiel na toto podľa všetkeho zložitejšie riešenie, ake je to jednoduchšie riešenie?
Cez čo sa da druha časť zadania spravit?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Generovanie 50 cisel a vypis dvoch prvkov

Príspevok od používateľa BX »

To tvoje riešenie je z tých troch asi tak stredné. Najjednoduchšie je moja jednotka
BX napísal:1) Prejdem celý regál knihu za knihou. U každej knihy sa zastavím a pozriem sa, či ďalej v regále je kniha s rovnakým názvom. Ak nájdem duplicity, vyhodím ich.
Napísať odpoveď