» »

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:

//
//  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.

minghags ::

Ja ampak izpis mora biti po datumu od starejšega do novejšega. Tega sortiranja pa res zdaj na razumem :S

kow ::

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)
Abnormal behavior of abnormal brain makes me normal...

minghags ::

Na žalost mi ne uspe :8) zdaj če mi lahko kdo pomaga glede kode bi lepo prosil... Hvala

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.
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…

minghags ::

hvala zacetnik11, samo za izpis mi zdaj manjka funkcija

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] Strukture

Oddelek: Programiranje
81060 (642) čuhalev
»

[C] Seznam s poljem

Oddelek: Programiranje
232416 (1896) aceton
»

pretvorba datuma v int

Oddelek: Programiranje
81196 (888) win64
»

[C++]Brisanje strukture

Oddelek: Programiranje
71408 (1339) jernejf
»

[C++]Strukture

Oddelek: Programiranje
54016 (3945) jernejf

Več podobnih tem