SelectionSort,problem s vytisknutim – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SelectionSort,problem s vytisknutim – C / C++ – Fórum – Programujte.comSelectionSort,problem s vytisknutim – C / C++ – Fórum – Programujte.com

 

Peu
~ Anonymní uživatel
8 příspěvků
11. 12. 2013   #1
-
0
-

 Zdravim potreboval bych poradit ohledne tisknuti vysledku. Tiskne mi to same nuly, zatimco kdyz dam misto tucne zvyrazneneho radku (viz zdrojak) napriklad:  printf("%6i %10i %7.2f %10i %7.2f\n", n, pocet_srovnani, pocet_srovnani / (n * log(n)/log(2)), pocet_presunu, pocet_presunu / (n * log(n)/log(2)));    tak to vysledky vypocita normalne, ale kdyz tam dam pouze n, tak nuly....nevite kde je problem?

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

int pocet_srovnani, pocet_presunu;

void UdelejPole(int A[], int n) {
    int i;
    for (i = 0; i < n; i++)
        A[i] = rand();
}


void SelecttionSort(int A[], int n) {

    int i, j, k;
    int x;
    for (i = 0; i < n-1; i++)
    {
        k=i;
        x=A[i];

            for (j = i+1; j<n; j++)
                pocet_srovnani++;
                if (A[j]<x)
            {
                k=j;
                x=A[j];
            }
            A[k]=A[i];
            pocet_presunu++;
            A[i]=x;
          }
}
int main()
{
    int i;
    int cisla[9] = {10,20,50,100,200, 500, 1000, 2000,5000};
    srand((int)time(0));

    printf("%7s %16s %18s\n----------------------------------------------\n", "pocet", "srovnani", "presuny");

    for (i = 0; i < 9; i++) {
        int n = cisla[i];
        int pole[n];
        UdelejPole(pole, n);
        SelecttionSort(pole, n);

        printf("%6d %10d %7.2f %10d %7.2f \n", n,  pocet_srovani, pocet_srovnani / n, pocet_presunu, pocet_presunu / n  );
        pocet_srovnani = 0;
        pocet_presunu = 0;

        if (i == 8) {
                printf("prvni cisla: \n");
            for (i = 0; i < 20; i++)
                printf(" %i ", pole[i]);
            printf("\n\n posledni cisla: \n ");
            for (i = n-10; i < n; i++)
                printf(", %i", pole[i]);
        }
    }

        return 0;
}
Nahlásit jako SPAM
IP: 93.93.33.–
11. 12. 2013   #2
-
0
-

To dělení je prováděno jako celočíselné (dělitel i dělenec jsou int), zkus dělitele nebo dělence přetypovat na float.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Peu
~ Anonymní uživatel
8 příspěvků
11. 12. 2013   #3
-
0
-

#2 hlucheucho
diky, pretypovani mi pomohlo, ale jen v druhe casti (pocet_presunu / (float) n );   ale pro pocet_srovnani / (float) n*n by to chtelo pouzit jinej trik :)

printf("%6d %10d %7.2f %10d %7.2f \n", n,  pocet_srovnani, pocet_srovnani / (float) n*n, pocet_presunu, pocet_presunu /(float) n  );
Nahlásit jako SPAM
IP: 93.93.33.–
11. 12. 2013   #4
-
0
-

pokud udělám něco / n * n  dojde ke krácení. Pokud se to má chovat tak, že ve jmenovateli je druhá mocnina n, musíš použít závorky, tedy  něco / (n*n). I zde platí, že operandy jsou int a výsledek také int

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Peu
~ Anonymní uživatel
8 příspěvků
12. 12. 2013   #5
-
0
-

#4 hlucheucho
prosimte muzu se jeste zeptat......  kdyz tisknu na konci pole tech prnich 20 a poslednich 10 cisel pole, proc to tiskne cisla z nesetrideneho pole a ne z toho setrideneho? 

Nahlásit jako SPAM
IP: 93.93.33.–
KIIV
~ Moderátor
+43
God of flame
12. 12. 2013   #6
-
0
-

#5 Peu
v kodu mas jedno pole, takze pokud neni setrizeny, tak si ho nesetridil.  Nebo vypisujes jiny pole nez chces...

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Peu
~ Anonymní uživatel
8 příspěvků
13. 12. 2013   #7
-
0
-

#6 KIIV

setrdine to pole je, protoze kdyz ve funkci Selectsort vymazu pocetsrovnani++, tak vytiskne setridene pole....jak je tohle mozne opravdu nechapu

Nahlásit jako SPAM
IP: 93.93.33.–
KIIV
~ Moderátor
+43
God of flame
13. 12. 2013   #8
-
0
-

takze, kdyz tam neni pocetSrovnani++ tak se to seradi, a pokud je tak neseradni... Oh gosh...  

            for (j = i+1; j<n; j++)
                pocet_srovnani++;
                if (A[j]<x)
            {
                k=j;
                x=A[j];
            }


cimpak by to jen asi tak mohlo byt? Dokud na tudle otazku neodpovis, tak se dal nepohnes :D

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Peu
~ Anonymní uživatel
8 příspěvků
13. 12. 2013   #9
-
0
-

#8 KIIV
promin nedoslo mi to >D chybi tam jen zavorky

Nahlásit jako SPAM
IP: 93.93.33.–
KIIV
~ Moderátor
+43
God of flame
13. 12. 2013   #10
-
0
-

#9 Peu
presne tak :D a todle mi doslo hned, jak si rekl "kdyz todle zakomentuju, tak to radi spravne" :)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Podobná vlákna

Problém v C — založil Robin

Problem — založil Ghosta

Problém — založil pali6

Problem — založil roonill

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý