Třídění struktury – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Třídění struktury – C / C++ – Fórum – Programujte.comTřídění struktury – C / C++ – Fórum – Programujte.com

 

BarBorka
~ Anonymní uživatel
2 příspěvky
13. 12. 2013   #1
-
0
-

Ahoj,

Mám strukturu např.

struct Porucha

{

string zacatek;

string konec;

string poznamka;

}

string zacatek obsahuje cas ve tvaru 08:00, 11:25, atd...

potřebovala bych poradit, jak tu strukturu pak setřídit podle toho začátku právě. Já si to udělala tak, že jsem si třeba čas 8:25 převedla na double(sekundy jsem vydělila 60 a přičetla k hodinám) a pak bubble sortem to setřídím. ale nevím jak bych to pak vypsala na obrazovku už tu setřízenou strukturu. Jedná se hlavně o to, abych neprohodila jen ten začátek, ale všechny prvky té struktury. Díky moc za radu :o)

Nahlásit jako SPAM
IP: 85.135.117.–
lukas.balaz0
Super člen
13. 12. 2013   #2
-
0
-

Podla mňa by bolo lepšie si časy pamätať ako napr. pair<int, int> a využiť skvelú vlastnosť pairov, že pri porovnávaní najprv porovnajú firsty, a ak sú rovnké až potom secondy. Sortiť môžeš pomocou funckie sort() z algorithm.h , ale tam asi budeš musieť použiť iný komparátor, niečo ako
bool porovavanie(pair<int,int>A,pair<int,int>B)return (A<B);

Vypisovanie je jednoduché, vypíšeš first, dvojbodka a second (ak sú first a second menšie ako 10, dáš pred nich 0, to je už jednoduché)

Nahlásit jako SPAM
IP: 213.215.106.–
lukas.balaz0
Super člen
13. 12. 2013   #3
-
0
-

sorry, chyba. Ak máš vector štruktúr a chceš ich usortiť, komparátor pre sort() bude:

bool porovnavanie(Porucha A,Porucha B)return (A.zaciatok<B.zaciatok)

Nahlásit jako SPAM
IP: 213.215.106.–
RePRO0
Super člen
13. 12. 2013   #4
-
0
-

Zdravím,

nešel jsem na pivko, tak jsem ti teď udělal celý program i s tím výpisem. Stačí prostě a jistě v tom Bubble sortu na začátku porovnávat ty číselné hodnoty té dané struktury (tedy čísla, ne řetězce) a pak se prohodí již celé ty struktury.

#include <iostream>
using namespace std;

struct Porucha 
{
       string zacatek;
       string konec;
       string poznamka;
};

int casNaMinuty(string retezec) {
    int h, m;
    sscanf(retezec.c_str(), "%d:%d", &h, &m);
    int minuty = (h * 60) + m;
    return minuty;
}

void seraditDleCasu(Porucha * p, int velikostPole) {
     bool seradit = true;
     while (seradit) {
           seradit = false;
           for (int i = 0; i < (velikostPole - 1); i++) {
               if ( casNaMinuty((*(p + i)).zacatek) > casNaMinuty((*(p + i + 1)).zacatek) ) {
                    seradit = true;
                    Porucha temp = (*(p + i));
                    (*(p + i)) = (*(p + i + 1));
                    (*(p + i + 1)) = temp;
               }
           }
     }
     return;
}

void vypsat(Porucha * p, int velikostPole) {
     for (int i = 0; i < (velikostPole); i++) {
         cout <<
         "start: " << (*(p+i)).zacatek << ", konec: " << (*(p+i)).konec << ", pozn.: " << (*(p+i)).poznamka << endl;
     }
}

int main(int argc, char *argv[]) {
    Porucha struktury[4] = {
            {"13:08", "13:55", "oprava 1"},
            {"11:59", "14:59", "oprava 2"},
            {"22:00", "23:00", "oprava 3"},
            {"08:02", "09:20", "oprava 4"}
    };
    
    seraditDleCasu(struktury, 4);
    vypsat(struktury, 4);    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Nahlásit jako SPAM
IP: 95.82.185.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
BarBorka
~ Anonymní uživatel
2 příspěvky
14. 12. 2013   #5
-
0
-

#4 RePRO
Děkuji, tohle jsem přesně myslela :o). 

Nahlásit jako SPAM
IP: 85.135.117.–
RePRO0
Super člen
14. 12. 2013   #6
-
0
-

Kdyby byl další nějaký problém, tak stačí napsat do tohoto vlákna, nebo označ odpověď, která ti pomohla a toto vlákno uzamčeme jako úspěšné.

Nahlásit jako SPAM
IP: 95.82.185.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
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, 8 hostů

Podobná vlákna

Třídění — založil Frantisek

Třídění čísel — založil Kaja

Trideni jmen — založil Lukáš

Třídění řádků v C — založil lukas011

Trideni Hashsetu — založil crash41

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ý