Forum » Programiranje » c++ (sortiranje)
c++ (sortiranje)
minghags ::
Lep pozdrav!
Zanima me, če mi lahko kdo pomaga pri tej nalogi. Napisal sem program, zdaj pa samo še moram narediti sortiranje od starejšega do novejšega. Lepo bi prosil za kakšno pomoč.
Koda:
Hvala
Zanima me, če mi lahko kdo pomaga pri tej nalogi. Napisal sem program, zdaj pa samo še moram narediti sortiranje od starejšega do novejšega. Lepo bi prosil za kakšno pomoč.
Koda:
// // main.cpp // vaja1 // // Created by M***o K********c on 11/28/11. // Copyright 2011 __MyCompanyName__. All rights reserved. // /* Napišite program za vnos podatkov o 10 računalnikih. Računalnik je nov tip in je sestavljen iz: ime, datuma_nakupa, hitrosti_procesorja, stevilo_jeder in velikosti_pomnilnika. Datum je sestavljen iz dneva, meseca in leta. Program naj vpisane podatke tudi izpiše urejene po datumu nakupa (naraščajoče). Pri implementaciji uporabite polje računalnikov in funkcije. */ #include <iostream.h> #include <stdlib.h> struct datum { char dan [32]; char mesec [13]; char leto [5]; void vnosDatum(); void izpisDatum(); }; void datum::vnosDatum() { cout << "Dan: "; cin.ignore(); cin.getline(dan,32); cout << "Mesec: "; cin.getline(mesec,13); cout << "Leto: "; cin.getline(leto,5); } void datum::izpisDatum() { cout << "Datum nakupa: " <<dan << "." << mesec <<"."<< leto << "\n"; } struct racunalnik { datum datum; char ime[10] ; int hitrost_procesorja; int velikost_pomnilnika; int stevilo_jeder; void Vpisi(); void Izpis(); }; void racunalnik::Vpisi() { cout << "Znamka računalnika: "; cin.getline(ime,10); cout <<"Hitrost procesorja [v MHz]: "; cin >> hitrost_procesorja ; cout <<"Število jeder: "; cin >> stevilo_jeder ; cout <<"Velikost pomnilnika [GB]: "; cin >> velikost_pomnilnika ; datum.vnosDatum(); } void racunalnik::Izpis() { cout << "\n" <<endl; cout << "Ime računalnika: "<< ime<<endl ; cout << "Hitrost procesorja: " << hitrost_procesorja <<" MHz "<<endl ; cout << "Število jeder: " << stevilo_jeder <<endl ; cout << "Velikost pomnilnika: " << velikost_pomnilnika <<" GB "<<endl ; datum.izpisDatum(); } int main() { racunalnik racunalnik[10]; int i; for ( i = 1; i < 11 ; i++) { cout << "Vpišite podatke za računalnik " << i << endl; racunalnik[i].Vpisi(); } for ( i = 1; i < 11 ; i++) { cout << "Spesifikacije za računalnik " << i << endl; racunalnik[i].Izpis(); } return 0; }
Hvala
kow ::
1. Praktično vsak program uporablja datume. To pomeni, da je ta problem že rešen in se uporabi že napisano knjižnico.
2. Če ignoriramo prvo točko. Datum naj bi bil število. Nato pa imaš funkcije, ki to število prilagodijo v nek dogovorjen koledar oz. string. Zato sortiranje datumov ni problem, ker so le celoštevilska števila. Spremeni definicijo podatkovne strukture datum.
2. Če ignoriramo prvo točko. Datum naj bi bil število. Nato pa imaš funkcije, ki to število prilagodijo v nek dogovorjen koledar oz. string. Zato sortiranje datumov ni problem, ker so le celoštevilska števila. Spremeni definicijo podatkovne strukture datum.
minghags ::
Ja ampak izpis mora biti po datumu od starejšega do novejšega. Tega sortiranja pa res zdaj na razumem :S
minghags ::
Hvala za to, ampak mi ni jasno kako spisat vse skupaj, da bo izpisovalo po tem zaporedju. Vem da moram datum gledat kot ddmmyyyy ampak kako sortirati potem...
Vesoljc ::
class Datum { public: short leto; byte mesec; byte dan; public: int operator < (const Datum & d) { if( leto > d.leto ) return 0; if( leto < d.leto ) return 1; if( mesec > d.mesec) return 0; if( mesec < d.mesec) return 1; if( dan > d.dan) return 0; if( dan < d.dan) return 1; return 0; } int operator > (const Datum & d) { return !(*this < d); } };
zdaj jih lahko primerjas v stilu:
if( racunalnik[a].datum > racunalnik[a+1].datum ) { racunlnik temp = racunalnik[a]; racunalnik[a] = racunalnik[a+1]; racunalnik[a+1] = temp; }
poglej si se bubble sort
http://mathbits.com/mathbits/compsci/ar...
Abnormal behavior of abnormal brain makes me normal...
minghags ::
Vesoljc: hvala, ampak je problem, da se program prvo napisal brez sortiranja in zdaj se nevem orientirati kak bi to v ta program vpeljal
Vesoljc ::
kak kak...
podatke vpises v polje, potem pa polje posortiras, ter izpises
poglej si tist bubble sort example, namesto tistega vectorja uporabi svoje polje, namesto numLength pa svoje stevilo elementov (10)
podatke vpises v polje, potem pa polje posortiras, ter izpises
poglej si tist bubble sort example, namesto tistega vectorja uporabi svoje polje, namesto numLength pa svoje stevilo elementov (10)
Abnormal behavior of abnormal brain makes me normal...
zacetnik11 ::
Najlažje narest tako da strukturi datum dodaš še eno polje recimo dat_index in temu polju prirediš vrednost (100000*letnica)+(100*mesec)+ dan, tako dobiš vrednost int.
Sedaj pa samo napišeš funkcijo sortiranje(bubble sort) in jih sortiraš po tem indexu.
Tukaj imaš nekaj na hitro spisane kode, sam preveri kako dela.
Sedaj pa samo napišeš funkcijo sortiranje(bubble sort) in jih sortiraš po tem indexu.
Tukaj imaš nekaj na hitro spisane kode, sam preveri kako dela.
struct datum { int dan; int mesec; int leto; int index; }; struct racunalnik { char ime_racunalnika[100]; char hitrost_procesorja[50]; int stevilo_jede; int velikost_pomnilnika; datum datum_nakupa; }; void vnesi_racunalnike(racunalnik tabela_pc[], int velikost) { int index =0; racunalnik pc; for(int i=0; i < velikost; i++) { cin >> pc.ime_racunalnika; cin >> pc.hitrost_procesorja; cin >> pc.velikost_pomnilnika; cin >> pc.stevilo_jede; cin >> pc.datum_nakupa.leto; cin >> pc.datum_nakupa.mesec; cin >> pc.datum_nakupa.dan; index = (pc.datum_nakupa.leto * 100000) + (pc.datum_nakupa.mesec * 100)+ pc.datum_nakupa.dan; pc.datum_nakupa.index= (pc.datum_nakupa.leto * 100000) + (pc.datum_nakupa.mesec * 100)+ pc.datum_nakupa.dan; tabela_pc[i] = pc; } } void soltiranje_racunalnikov_po_datumu(racunalnik tabela_pc[], int velikost) { racunalnik temp; for(int i=0; i < velikost; i++) { for (int j=0; j < velikost -1; j++) { if(tabela_pc[j].datum_nakupa.index > tabela_pc[j+1].datum_nakupa.index) { temp = tabela_pc[j]; tabela_pc[j] = tabela_pc[j+1]; tabela_pc[j+1] = temp; } } } } int main(int argc, char *argv[]) { int leto, mesec, dan, skupaj; racunalnik tabela_pc[20]; int velikost=5; vnesi_racunalnike(tabela_pc, velikost); soltiranje_racunalnikov_po_datumu(tabela_pc, velikost); izpis_racunalnikov_po_datumu(tabela_pc, velikost); system("PAUSE"); return EXIT_SUCCESS; }
Zgodovina sprememb…
- spremenil: zacetnik11 ()
zacetnik11 ::
Evo še tole zadevo. Sam dodaj notri kar pač potrebuješ, jst sem kr izpisal naziv in datum.
void izpis_racunalnikov_po_datumu(racunalnik tabela_pc[], int velikost) { for(int j=0; j< velikost; j++) { cout << tabela_pc[j].ime_racunalnika << endl; cout << tabela_pc[j].datum_nakupa.dan << "." << tabela_pc[j].datum_nakupa.mesec << "." << tabela_pc[j].datum_nakupa.leto << endl; } }
minghags ::
zacetnik11: ful ti hvala, sem zdaj vse skupaj implementiral v moj program in dela. Res ti ful hvala!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] StruktureOddelek: Programiranje | 1060 (642) | čuhalev |
» | [C] Seznam s poljemOddelek: Programiranje | 2416 (1896) | aceton |
» | pretvorba datuma v intOddelek: Programiranje | 1196 (888) | win64 |
» | [C++]Brisanje struktureOddelek: Programiranje | 1408 (1339) | jernejf |
» | [C++]StruktureOddelek: Programiranje | 4016 (3945) | jernejf |