Close
Duke shfaqur rezultatin -9 deri 0 prej 3
  1. #1
    Programues Softueresh Maska e edspace
    Anėtarėsuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565

    Sfida nga PR-TECH: Trungu - Llogaritja e lidhjeve

    Sfida ėshtė hapur nga Grupi Teknologjik i Prishtinės. Po e hedhim nė forum qė anėtarėt tė mund tė diskutojnė zgjidhjet dhe tė mėsojnė nga eksperienca e njėri-tjetrit. Tema do qėndrojė e mbyllur gjatė kohės qė sfida ėshtė e hapur dhe zgjidhja juaj nuk duhet bėrė publike gjatė kėsaj kohe. Kur tė skadojė afati i lejuar, tema do hapet dhe pastaj mund tė postoni pėrgjigjet tuaja dhe tė diskutoni me anėtarėt e tjerė.

    Trungu - Llogaritja e lidhjeve
    Problemi eshte i hapur
    Prej:11/12/2004 Deri:20/12/2004
    Edituar me 11/12/04


    Kjo sfidė ka ta tė bėjė me manupulim tė trungut (tree). Detyra ėshtė qė tė llogaritet rruga prej burimit deri te destinacioni. Ne figurėn e mėposhtme ndodhen rrathėt (A, B, C...) dhe lidhjet nė mes tė atyre rrathėve. Rrathėt janė unik. Lidhja nė mes tyre bėhet vetėm nė njė drejtim (shiko shigjetat) si dhe supozohet qė NUK ka raste tė cikleve. Cdo rreth lidhet pėr sė paku njė rreth tjetėr dhe mund tė degėzohet nė mė shumė se njė drejtim. Detyra ėshtė qė tė shkruhet funksioni (procedura) qė kthen numrin e lidhjeve me anė te cilave janė lidhur dy rrathėt e dhėnė. Psh. nese kėrkohet kerko('A','D') duhet tė kthehet 2, ndėrsa nėse nuk gjindet asgjė atėherė 0, psh kerko('B','P') ėshtė 0. Poashtu ('D','A') ėshtė 0 pėr shkak tė shigjetave njė kahėshe.


    Shikoni fotografinė e bashkėngjitur.

    Nė mėnyrė qė t'a zgjidhni kėtė detyrė, ju e pėrdorni databazėn (e ndėrtuar nė bazė tė figurės) ku ēdo rresht i korrespondon nje lidhjeje.

    Kodi:
    A G
    A B
    G I
    B D
    B L
    D J
    D F
    J K
    L M            
    P R
    R T
    T E
    E C
    C H

    Mėnyrėn se si kjo databazė do tė lexohet/krijohet zgjidhni ju (nga skeda, nga pėrdoruesi, "hard-code" etj) . Me rėndėsi ėshtė qe funksioni "kerko(X, Y)" te kthen vlerėn e sakte dhe qė databaza te jetė fleksibile (tė mund tė ndryshohet lehtė). Merreni parasysh qe funksioni mund te funksionojė edhe duke pėrdorur hyrje tė tjera.
    Testoni funksionin pėr kėto raste (pavarėsisht nga gjuha):

    Kodi:
    kerko('A','I') // 2 (kthen 2)
    kerko('A','G') // 1
    kerko('A','F') // 3
    kerko('A','D') // 2
    kerko('A','M') // 3
    kerko('A','L') // 2
    kerko('A','K') // 4
    kerko('J','K') // 1
    kerko('B','L') // 1
    kerko('L','B') // 0
    kerko('P','H') // 5
    kerko('E','T') // 0
    kerko('M','P') // 0
    kerko('R','D') // 0

    Programi mundet tė shkruhet nė C, C++, Java, Perl, Visual Basic (VB.NET), C# . Kėsaj rradhe ju mund tė perdorni edhe Scheme/Lisp si dhe Prolog pėr shkak tė natyrės sė problemit. Nėse programi juaj pėrmbanė mė shumė se njė skedar atėherė le tė arkivohet si tar.gz apo zip dhe si i tillė le tė dėrgohet nė programim ET pr-tech PIKĖ net.
    Fotografitė e Bashkėngjitura Fotografitė e Bashkėngjitura  
    Edi

  2. #2
    Programues Softueresh Maska e edspace
    Anėtarėsuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565

    Zgjidhja ime nė C++

    Kam pas bėrė njė program tė ngjashėm nė shkollė dhe vendosa tė pėrdorja strukturėn e hartės (MAP) pėr ndėrtimin e pemės.
    Pėr ata qė nuk i kanė pėrdorur mė parė, hartat janė si matricat por tė lejojnė tė zgjedhėsh vetė tipin e indeksit. Janė pak a shumė si hash array tė PERL dhe associative array tė PHP.
    Nė matrica janė vetėm indekset me numra matrica[0], matrica[1], ... ndėrsa pėr hartat mund tė kesh indekse tė ēdo tipi. Pėr kėtė program do mjaftonte indeksi char sepse kemi vetėm njė shkronjė por unė zgjodha strings qė programi tė punojė edhe me fjalė.

    Shikoni figurėn e bashkėngjitur si shėmbull.

    Hartat nė brėndėsi janė ndėrtuar mbi pemėt. Dmth kemi tre shtresa strukturash:
    pemė me dy degezime -> hartė -> pemė me shumė degėzime
    Programuesi menaxhon vetėm njė shtresė ndėrsa tė tjerat janė tė gatshme nė STL (STANDARD TEMPLATE LIBRARY).

    Pyetje, kėshilla, kritika?

    Kodi PHP:
    // Programi: Llogaritja e lidhjeve
    // Data: 20/12/04 
    // Pershkrim: Sfida e Javes nga Grupi Teknologjik i Prishtines 
    // Perpiluesi: Dev-C++ 4.9.9.1 
    // Perdorimi: 
    //    Formo nje peme nga skedari databaza.txt dhe llogarit numrin e lidhjeve 
    //    per kerkesat e perdoruesit. 
    //    Databaza mund te permbaje shkronja (psh. P T) ose fjale (psh. PRISHTINA TECH).
    //    Programi ben dallime midis shkronjave te medha dhe te vogla. A != a
    //    Nuk ka kufizim per numrin e degezimeve. 0 -> oo
    // 
    #include <iostream>
    #include <fstream> // File Stream: Per leximin e skedareve
    #include <string> 
    #include <map> // harte[celes] = vlere  // C++ STL

    using namespace std;

    // nyje[dege] = nyje1
    // nyje1[dege] = nyje2
    // nyje3[dege] = nyje4
    // ...
    typedef map stringvoid * > nyje
    typedef nyje peme// edhe pema mund te mendohet si nje nyje 

    //*****************************************************************************
    // lexon skedarin dhe kthen treguesin e nje peme 
    // pema eshte bosh nqs skedari nuk mund te hapet
    //
    peme lexo_databazenstring skedari );

    //*****************************************************************************
    // lidh fillimin me fundin ne pemen p
    // kthen PO (true) nqs ben lidhjen
    // kthen JO (false) nqs nuk e ben dot lidhjen (fillimi nuk gjendet ne peme)
    // funksion veteperserites/rekursiv
    //
    bool hidh_ne_pemepeme p, const string fillimi, const string fundi );

    //*****************************************************************************
    // kerkon nyjen me emrin varg ne pemen p
    // kthen treguesin nqs e gjen ose NULL nqs nuk e gjen. 
    // rezultati = distanca nga renja e pemes p deri tek nyja me emrin varg
    // shkalla tregon distancen (qe natyrisht fillon nga 1)
    // funksion veteperserites/rekursiv
    //
    peme kerkopeme * const p, const string vargint rezultatiint shkalla 1);


    //**************************** MAIN *******************************
    int main(int argcchar *argv[])
    {
        
    peme lexo_databazen("databaza.txt"); // formojme pemen p
        
        
    if( p->empty() ) // nqs databaza eshte bosh
        
    {
            
    cerr << "Gabim: Databaza nuk mund te hapej ose eshte bosh" << endl;
            return 
    0;
        }
        
        
    string fillimifundi// fillimi ----- lidhja -----> fundi
        
    int rezultati 0;     // permban distancen nga filimi --> fundi
        
    nyje n;              // tregues per nje nyje te pemes

        
    cout << "Jep komandat per te kerkuar (psh: 'A G' pa thonjza gjen distancen nga A ne G)." << endl;
        
    cout << "Shkruaj 'mbyllu' pa thonjza per te mbyllur programin." << endl;

        while( 
    true )  // merr komanda nga perdoruesi
        
    {              // deri sa perdoruesi te shkruaj komanden "mbyllu"        
            
    cin >> fillimi;   
            if( 
    fillimi == "mbyllu" ) return 0
            
            
    cin >> fundi;      // merr fundin 
            
            
    kerko(pfillimirezultati);  // kerkojme fillimin ne peme
            
    rezultati 0;                        
            
            if( 
    != NULL // nqs nyja e fillimi ka dege te tjera
                
    kerko(nfundirezultati);  // kerkojme fundin
            
            
    cout << fillimi << " -> " << fundi << " = " << rezultati << endl;
            
            
    rezultati 0;
        }
        
        return 
    0;
    }

    //**************************** LEXO DATABAZEN *******************************
    peme lexo_databazenstring skedari )
    {
         
    ifstream db (skedari.c_str(), ios::in); // hapim db per lexim

         
    peme = new peme// assert(p != null) // krijojme pemen kryesore
         
    string fillimifundi;     
         
         while( 
    db.good() )  // per aq kohe sa mund te lexojme nga skedari
         
    {
            
    db >> fillimi;   // lexojme fillimin
            
    db >> fundi;     // lexojme fundin
            
            // nqs nuk i lidhim dot
            
    if( !fillimi.empty() && !fundi.empty() && !hidh_ne_pemepfillimifundi ) )  
            {
                
    nyje = new nyje// assert(n != null)  // formo nje nyje te re
                
    n->insert(make_pair(fundi, (void *)NULL)); // lidh fundin
                
    p->insert(make_pair(fillimin));          // lidh fillimin
            
    }
         }
         
         return 
    p// kthejme mbrapsh pemen/databazen
    }

    //**************************** HIDH NE PEME *******************************
    bool hidh_ne_pemepeme p, const string fillimi, const string fundi )
    {
         
    peme::iterator i p->find(fillimi); // kerkojme fillimin ne pemen p
         
         
    if( != p->end() ){                // nqs e gjejme
             
    if( i->second == NULL )         // po te mos kete dege te tjera
             
    {                               // formojme degen e pare
                 
    nyje = new nyje// assert(n != null)
                 
    n->insert(make_pair(fundi, (void *)NULL)); // lidhim fundin
                 
    i->second n;                             // lidhim fillimin
             
    }
             else     
    // nqs ka dege te tjera, shtojme nje me shume
                 
    ((peme *)(i->second))->insertmake_pair(fundi, (void *)NULL));
                 
             return 
    true// lidhja u be me sukses
         
    }
         
         
    // nqs nuk e gjetem fillimin ne kete peme, do kerkojme nyjet e tjera
         // duke thirrur vetvetet per cdo nyje te pemes (nen-peme)
         
         
    for( p->begin(); != p->end(); i++ )
              if( (
    peme *)i->second != NULL )      
                  if( 
    hidh_ne_peme( (peme *)i->secondfillimifundi ) )     
                        return 
    true;  // kthejme PO (true) nqs e gjejme fillim     
                        
         
    return false// kthejme JO (false) nqs fillimi nuk gjendet ne peme
    }

    //**************************** KERKO PEMEN *******************************
    peme kerkopeme * const p, const string vargint rezultatiint shkalla )
    {
         
    peme::iterator i p->find(varg); // kerkojme vargun ne pemen p
         
         
    if( != p->end() )               // nqs e gjejme
         
    {
             
    rezultati shkalla;  // = numri i degezimeve nga renja deri tek vargu
             
    return (peme *)i->second;  // kthejme degezimet e vargut (mund te mos kete)
         
    }
         
         
    nyje n;
         
         
    shkalla++;
         
         
    // mqns nuk e gjetem ne kete nyje, shikojme nyjet e tjera (nen-pemet)
         
    for( p->begin(); != p->end(); i++ )
         {
             if( 
    i->second != NULL )
             {
                 
    kerko( (peme *)i->secondvargrezultatishkalla );
                 if( 
    rezultati != ) return n;
             }
         }
         
         return 
    NULL;
    }

    // fund 
    Fotografitė e Bashkėngjitura Fotografitė e Bashkėngjitura  
    Ndryshuar pėr herė tė fundit nga edspace : 21-12-2004 mė 23:32
    Edi

  3. #3
    Analog Brain Maska e josif
    Anėtarėsuar
    26-02-2004
    Vendndodhja
    madagaskar
    Postime
    245
    // Me poshte eshte zgjidhja ime per sfiden:

    Kodi PHP:
    #include <iostream>
    #include <cstdlib>
    using namespace std;

    class 
    Trungu{

    private:
        
    struct Node{
            
    char e;
            
    Node** femije;
            
    int no_femije;

            
    Node(char element);
        };
        
        
    Node** nyjet;
        
    int no_nyjeve;

        
    Nodegjej(char e);
        
    int _kerko(Node* & _e1char e2);
        
    int permireso(int distanca);

    public:
        
    Trungu();
        ~
    Trungu();
        
    void shto(char e1char e2);
        
    int  kerko(char e1char e2);
    };

    Trungu::Node::Node(char element) : e(element){ femijeNULLno_femije=0; }

    Trungu::Trungu(){ nyjetNULLno_nyjeve0; }

    Trungu::~Trungu(){    for(int i=0ino_nyjevei++) delete nyjet[i]; }

    void Trungu::shto(char e1char e2){

    Node _e1NULL, * _e2NULL;
    _e1gjej(e1); _e2gjej(e2);

    if(!
    _e1){
        
    _e1= new Node(e1);
        
    nyjet=(Node**)realloc(nyjetsizeof(Node*) * (no_nyjeve 1));
        
    nyjet[no_nyjeve]= _e1no_nyjeve++;
        }
    if(!
    _e2){
        
    _e2= new Node(e2);
        
    nyjet=(Node**)realloc(nyjetsizeof(Node*) * (no_nyjeve 1));
        
    nyjet[no_nyjeve]= _e2no_nyjeve++;
        }

    _e1->femije=(Node**)realloc(_e1->femijesizeof(Node*) * (_e1->no_femije 1));
    _e1->femije[_e1->no_femije]= _e2_e1->no_femije++;
    }

    Trungu::NodeTrungu::gjej(char e){
        for(
    int i=0i<no_nyjevei++) if(nyjet[i]->== e) return nyjet[i];
    return 
    NULL;
    }

    int Trungu::kerko(char e1char e2){
        
    Node_e1gjej(e1);
    return 
    permireso(_kerko(_e1e2));
    }

    int Trungu::permireso(int distanca){ return (distanca == -1) ? distanca; }

    int Trungu::_kerko(Node* & _e1char e2){
        if((
    _e1->e) == e2) return 0;
        for(
    int i=0i_e1->no_femijei++){
            
    int x=0;
            if( (
    x_kerko(_e1->femije[i], e2)) != -1)
                return 
    x;
        }
    return -
    1;

    Ndryshuar pėr herė tė fundit nga edspace : 22-12-2004 mė 11:29
    He walks among us, but He is not one of us ...

Tema tė Ngjashme

  1. Pėrgjigje: 5
    Postimi i Fundit: 16-05-2009, 17:49
  2. Besnik Trungu
    Nga katana nė forumin Arti shqiptar
    Pėrgjigje: 16
    Postimi i Fundit: 01-04-2007, 14:23
  3. Nė kerkim tė lidhjeve kulturore "tė pamundura" nė parahistori.
    Nga Baptist nė forumin Arkeologji/antropologji
    Pėrgjigje: 6
    Postimi i Fundit: 17-02-2007, 19:26

Regullat e Postimit

  • Ju nuk mund tė hapni tema tė reja.
  • Ju nuk mund tė postoni nė tema.
  • Ju nuk mund tė bashkėngjitni skedarė.
  • Ju nuk mund tė ndryshoni postimet tuaja.
  •