IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Peta
Člen
Avatar
Peta:7.1.2016 20:46

Ahoj, nemohl by mi prosím někdo pomoct? Potřebovala bych vypsat prvních dvacet a posledních dest prvků z třídění 5000 prvků, ale nevím jak přesně na to. Vím, že by tam mělo být něco jako

for (i = 0; i < 19; i++) {
        printf(......);

a

for (i= 4989; i < 4999; i++) { printf(...);

kód:

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

int insertionsort(int n)
{

    int pole[n], i, j, temp, srovnani = 0, presuny = 0;

    for (i = 0; i < n; i++)
        pole[i] = rand() % 100;

    for (i = 1; i<n; i++) {
        temp = pole[i];
        j = i - 1;

        if (i >= 0) {
            srovnani++;
            if (pole[i] > temp) {
                srovnani++;
            }
        }
        while (j >= 0 && pole[j] > temp) {
            srovnani++;
            pole[j + 1] = pole[j];
            presuny++;
            j--;
        }
        pole[j + 1] = temp;
    }

    for (i = 0; i < n; i++) {
        printf("%i ", pole[i]);
    }

    float pocet_srovnani, pocet_presunu;

    pocet_srovnani = (float)srovnani / (n*n);
    pocet_presunu = (float)presuny / (n*n);

    printf("%i\t\t %i %.2f\t %i %.2f\n", n, srovnani, pocet_srovnani, presuny, pocet_presunu);

    return 0;
}

int main()

{
    srand(time(0));

    printf("Pocet\t Srovnani\t Vymeny\n---------------------------\n");

    insertionsort(10);
    insertionsort(20);
    insertionsort(50);
    insertionsort(100);
    insertionsort(200);
    insertionsort(500);
    insertionsort(1000);
    insertionsort(2000);
    insertionsort(5000);

    return 0;
}
 
Odpovědět
7.1.2016 20:46
Avatar
Odpovídá na Peta
Neaktivní uživatel:7.1.2016 22:58

no asi se to samo nabizi ... printf("%d", pole[i]) ... pokud chces, co cislo to vlastni radku udelas printf("%d\n", pole[i]) .. (\n to je newline)
pokud nevis jak se printf pouziva (coz nerikam, jen tu vnimam jistou moznost) tak je to funkce berouci jeden nebo vice parametru, prvnim z nich musi byt za vsech okolnosti string ... tzv. ridici string (jestli chces) ... v nem muze byt text a specialni formulky, ktere se budou nahrazovat temi dalsimi parametry, je to asi takhle %d integer %f float %lf long float %c character %s string a mnoho dalsich ... celkove - umi to vsechny datovy typy cecka, umi to dokonce jeste mnohem vic, zarovnavani cisel na pocet cifer atd. moc moc veci... doporucuju prolustrovat zdejsi archiv, urcite najdes neco co te postrci dal

doufam, ze moje rada pomuze

Nahoru Odpovědět
7.1.2016 22:58
Neaktivní uživatelský účet
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Peta
David Novák:7.1.2016 23:52

Ten výpis budeš muset udělat přímo ve funkci, protože tam to pole máš lokální. Pokud to má vypsat pouze u poslední možnosti, tak můžeš přidat parametr:

int insertionsort(int n, int vypis)

V programu by ses po seřazení ptala if (vypis) a měla bys tam ty dva cykly, co máš nahoře.. Akorát bych tam nepsal čísla napevno, ale využil proměnnou n:

if (vypis && n >= 20)
{
  for (i = 0; i < 20; i++) {
   printf("%i ", pole[i]);
  }
  for (i = n - 11; i < n; i++) {
   printf("%i ", pole[i]);
  }
}

Jak vidíš, je třeba dávat pozor, abys nečetla mimo pole, kdyby náhodou bylo n menší než dvacet.. Dalo by se to vyřešit také tak, že bys použila další proměnnou, která by byla 20 pro n >= 20 a n pro n < 20.. Nebo můžeš přidat další argumenty a pak při volání toho sortu přímo specifikovat, kolik chceš vypsat ze začátku a kolik z konce.

Pak bys tu fci volala jako:

insertionsort(2000, 0);  // nic se nevypise
insertionsort(5000, 1);  // probehne vypis
Editováno 7.1.2016 23:54
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.1.2016 23:52
Chyba je mezi klávesnicí a židlí.
Avatar
Peta
Člen
Avatar
Odpovídá na David Novák
Peta:8.1.2016 5:14

Děkuji :)

 
Nahoru Odpovědět
8.1.2016 5:14
Avatar
David Novák
Tvůrce
Avatar
Odpovídá na Peta
David Novák:8.1.2016 10:13

Nemáš za co ;)

Nahoru Odpovědět
8.1.2016 10:13
Chyba je mezi klávesnicí a židlí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.