Close
Faqja 0 prej 2 FillimFillim 12 FunditFundit
Duke shfaqur rezultatin -9 deri 0 prej 16
  1. #1
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565

    Sfida nga PR-TECH: Trekëndëshi i Paskalit

    Sfida është hapur nga Grupi Teknologjik i Prishtinës. Ato hidhen 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ë.

    Trekëndëshi i Paskalit
    Problemi eshte i hapur
    Prej:03/11/2004 Deri:15/11/2004


    Në këtë sfidë ju duheni t'a krijoni një skriptë që do të merr vlerën e rreshtit dhe vlerën e elementit mbrenda rreshtit të dhënë tek Trekëndëshi i Paskalit (ang. Pascal's Triangle). Pas marrjës të këtyre vlerave, skripta e kalkulon vlerën adekuate. Pra, nëse vlera hyrëse për rresht është 4 dhe vlera për elementin mbrenda këtij rreshti është 3, atëherë rezultati do të jetë 3.
    Nëse i shikoni katër rreshtat e parë të Trekëndëshit të Paskalit, do të vëreni që elementi i tretë i rreshtit të katërt ka vlerën 3, ku kjo është në pajtueshmëri me kalkulimin e shfaqur në rreshtat e mësipërm.

    Kodi:
    1
    1  1
    1  2  1
    1  3  3  1
    Merreni parasysh që skripta duhët t'a bëj edhe vërtetimin e vlerës të elementit mbrenda rreshtit. P.sh. nëse vlera e rreshtit është 2 dhe vlera e elementit mbrenda këtij rreshti është 4, atëherë skripta duhet të jep mesazh që rreshti adekuat nuk përmbanë atë element.

    Skripta mundet të bëhet në C, C++, Java, ose Perl. 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.
    Rrezultatet dhe kodet e sakta do të paraqiten deri më 1 javë pas skadimit të afatit të problemit.
    Ndryshuar për herë të fundit nga edspace : 17-11-2004 më 13:29
    Edi

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

    Zgjidhja ime në C++

    Kodi PHP:
    // Emri: Trekendeshi i Paskalit
    // Autori: Eduard Papa 
    // Email: edspace ET comcast PIKË net
    // Data: 04/11/04 
    // Pershkrim: Sfida e Javes nga Grupi Teknologjik i Prishtines
    // Perpiluesi: Dev-C++ 4.9.9.0
    // Perdorimi: paskali.exe #rreshtit #elementit
    //       P.sh. paskali.exe 4 5
            
    #include <iostream>

    using namespace std;

    // funksioni: faktorial
    // merr: numer
    // kthen: faktorialin e numrit
    // psh. 3! = 3 * 2 * 1 = 6
    // funksion riperserites (recursive)
    int faktorial(int numri);

    // funksioni: main
    // merr: numrin e argumentave, argumentat
    // argumenti i pare: adresa e programit
    // argumenti i dyte: rreshti
    // argumenti i trete: elementi
    int main(int argcchar *argv[])

      
    // nqs jane me pak se tre argumenta
      // nxjerrim mesazh gabimi dhe mbyllim programin
      
    if( argc )
      {
        
    cout << "Numer i gabuar argumentash." << endl;
        return 
    0;
      }
      
      
    // merr argumentin e rreshtit dhe elementit
      // i shnderrojme ne int me funksionin atoi
      
    int rreshti atoi(argv[1]);
      
    int elementi atoi(argv[2]);
      
      
    // kontrollojme nqs te dhenat jane te gabuara
      // dhe nxjerrim mesazh, mbyllim programin
      
    if( elementi || elementi rreshti )
      {
        
    cout << "Gabim: Rreshti " << rreshti
           
    << " nuk permban elementin " << elementi << endl;  
        return 
    0;
      }
      
      
    rreshti--; // zbresim 1 sepse numerimi fillon nga 0
      
    elementi--; // zbresim 1 sepse numerimi fillon nga 0
      
      // formula per te gjetur vleren: rreshti! / ( elementi! * (rreshti - elementi)! )
      
    int rezultati faktorial(rreshti) / (faktorial(elementi) * faktorial(rreshti elementi)); 
      
      
    cout << "Elementi " << elementi 1
         
    << " ne rreshtin " << rreshti 
         
    << " eshte " << rezultati << endl
      
      
    // gjithcka mbaroi me sukses, mbyllim programin
      
    return 0;
    }

    int faktorial(int numri) {
      if(
    numri <= 1) return 1;
      return 
    numri faktorial(numri 1);
    }

    // fund 
    Edi

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

    Zgjidhja e Hasa Cana në C

    Kodi PHP:
    /****************************************************
    * Zgjidhja e problemit te javes : Trekendeshi i Paskalit 
    * Autor: Hasan Cana <vpb ET albabsd PIKË org> 
    *      
    * Ska fillozofi veq keni me shkru vleren e rreshtit 
    * edhe vleren e elementit edhe ka me ju tregu rrezultatin
    * nese e keni shkru ndonje vlere te naj elementit qe nuk egziston
    * ne ate rresht ateher ka me ju tregu qe aj element nuk egziston     
    ****************************************************/

    #include <stdio.h>

    int main ()
    {

    /* Definimi i ARRAY-ave
    */
    int rreshti_i_kerkuar;
    int rreshti;
    int elementi;
    /* ktu mirret vlera e rreshtit edhe elementit
    */ 
    printf("Vlera e rreshtit: ");
    scanf("%d", &rreshti_i_kerkuar);
    rreshti rreshti_i_kerkuar;
    printf("\nVlera e elementit: ");
    scanf("%d", &elementi);
    int xy;
    /* ktu x edhe y barazohen me vlerat qe i kina jap ma nalt
    * qe me dit cilin rresht edhe cilin
    * element me kerku per me gjet rrezulltatin
    */
     
    for (x=rreshti<= rreshtix++) 
     for (
    y=elementi<= elementiy++) 
    /* nese y osht ma e madhe se x ateher na tregon qe elementi nuk egziston
    * sepse numri i rreshtave smunet me kon ma i vogel se numri i elementeve psh
    * 1  2  1  ky osht rreshti i tret edhe ka tri elemente edhe domethon qe
    * x munet me qen ma e madhe se y po munet me kon edhe baraz me y ama sguxon me qen
    * ma i vogel se y se rreshti i tret nuk ka element tkatert kshtut qe po tregon qe numri 
    * i elementeve smunet me kon ma i madh se i rreshtave  ishalla pe kuptoni :P
    */
     
    if (y>x
       
    printf("\nKy element nuk egziston ne rreshtin qe e keni cekur me lart\n");
    /* nese y osht ma e vogel se x ateher zbatohet formula e shkrume ma posht
    */ 
    else if (y<x
       
    printf ("\n\n%6d\n\n",formula(x,y));
    /* edhe ktu gjithashtut
    */
     
    else if (y=x
     
    printf("\n\n%6d\n\n",formula(x,y));

    }
    /* funksioni qe i kryn qato operacionet per trekendeshin e paskalit
    */
    int formula (int xint y)
    {
    /* qitu duhet me bo y barazi me 1 se me bo y barazi me 0 ja nis 
    * mi numru rreshtat edhe elementet prej zeros
    */
    if (y==1)
    return 
    1;
    else if (
    x==y)
    return 
    1;
    else
    return (
    formula(x-1,y-1)+formula(x-1,y));

    Edi

  4. #4
    mos e luaj; I DEBUAR! Maska e qoska
    Anëtarësuar
    17-05-2004
    Vendndodhja
    tirane
    Postime
    837
    meqenese programi punon por eshe shkruar ne c style per te qene i plote o edspace veri dhe ca kontroll gabimesh te nevojshme per nje program te plote.
    Gjithsesi zgjidhja per mua mbetet e sakte, panvaresisht se nqs fundkisoni faktorial do te zevendesohej me nje menyre iterative cka do te thote nje cikel(loop) si "while" do te ishte me i shpejte.
    P.S. Eshte vetem nje kendveshtrim mos fillojme te bejme sherre jo kush di me shume a me pak , JU LUTEM

  5. #5
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Përdora metodën ripërsëritëse sepse e kisha të gatshme, është funskion i shkurtër, dhe i lehtë për të kuptuar. Mënyra iterative me While dhe For janë pak më të shpejta por me një përpilues të mirë, mund të eliminohet fare ndryshimi.

    Nuk të kuptova në lidhje me kontrollin e gabimeve. E ke fjalën për gabimet e tipit try..catch apo return 0, 1, 2...

    Gabimet më të rëndësishme kapen nga if-et.
    Edi

  6. #6
    mos e luaj; I DEBUAR! Maska e qoska
    Anëtarësuar
    17-05-2004
    Vendndodhja
    tirane
    Postime
    837
    try dhe catch
    e kisha fjalen ose me mire te themi assert() qe perdoret ne keto raste sidomos nga konvertimi qe behet ne atoi()

  7. #7
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Menjëherë pas atoi(), kam shkruajtur IF për të kapur gabimet. Nuk besoj të ngelet ndonjë gabim pa kapur.

    Shkruaj ndonjë rresht kod si shëmbull për të treguar diçka që do kapje ti me assert() që nuk e kap IF që kam shkruajtur unë.
    Edi

  8. #8
    i/e regjistruar
    Anëtarësuar
    11-10-2004
    Postime
    39
    Po jap edhe une disa mendime meqe tema me duket interesante.

    Programi i Edit jep rezultate korrekte deri ne rreshtin e 13.
    Per rreshtin e 14 e me tej rezultatet jane te gabuara. P.sh. rezultati i ketij programi per elementin 2 ne rreshtin 14 eshte 4. Natyrisht pergjigja e sakte eshte 13.
    Arsyeja e ketij gabimi eshte qe 13! = 6227020800 nuk mund te paraqitet nga nje int ne C++ (Windows). Kur sistemi mundohet te paraqese 13! me int kemi nje integer overflow. Numri i plote me i madh qe mund te paraqitet nga nje int eshte 2147483648 kurse numri me i madh qe mund te paraqitet nga nje unsigned int eshte 4294967296. Nese do te paraqitesh numra me te medhenj se keto duhet te perdoren metoda te tjera.
    Per me teper programi i Edit jep nje division by zero error, p.sh. per elementin 4 ne rreshtin 100. Prandaj nje try ... catch do kishte ndihmuar ne kete rast. Arsyeja e gabimit eshte e njejte si me pare, integer overflow.

    Programi i Hasanit jep rezultate te sakta per sa kohe qe rezultati vete mund te paraqitet me nje integer. Nese do perdorej unsigned int mund te merreshin me shume rezultate te sakta sic e permenda me lart.

    Ne lidhje me dallimin me funksioneve rekursive dhe iterative: Eshte teper e veshtire qe nje kompilator i nje gjuhe imperative si C++ ose Java te jape te njejten shpejtesi per funksionet rekursive dhe iterative. Ceshtja eshte se sa here qe therritet nje funksion duhet krijuar nje stack frame e re e cila sigurisht qe merr kohe dhe memorie. Vetem ne gjuhe funksionale dhe vetem kur eshte e mundur dhe vetem kur programuesi e di se c'ben eshte e mundur qe nje program rekursiv te kete te njejten shpejtesi me nje program iterativ. Ndonje dite mund te flasim per kete kocept ne ndonje thread te posaçme. Kush nuk pret dot le te kerkoje ne Google per "tail recursive".

    Sic thashe me lart programi i Hasanit jep rezultate te sakta, por shpejtesia e tij le per te deshiruar.
    Problemi nuk eshte vetem qe programi eshte rekursiv, por edhe menyra e perdorimit te algoritmit eshte naive.
    Vini re qe formula e perdorur eshte
    p(x,y) = p(x-1, y-1) + p(x-1, y)
    Ku x eshte rreshti dhe y pozicioni ne rresht.
    Por :
    p(x-1, y-1) = p(x-2, y-2) + p(x-2, y-1)
    p(x-1, y) = p(x-2, y-1) + p(x-2, y)

    Vini re qe p(x-2, y-1) llogaritet dy here ne programin e Hasanit. Nese futesh me tej ne rekursion do shohesh qe shumica e elementeve llogariten shume shume here, nderkohe qe natyrisht nese nje element eshte llogaritur me pare nuk ka nevoje te llogaritet me.
    Ne fakt programi i Hasanit eshte eksponencial ne run-time dhe eksponecial ne memorie. Une bera disa eksperimente ne kompjuterin tim dhe mora keto rezultate:
    Elementi 4 ne rreshtin 500 merr 2 sekonda per tu llogaritur.
    Elementi 4 ne rreshtin 1000 merr 19 sekonda per tu llogaritur.
    Elementi 4 ne rreshtin 2000 merr 148 sekonda per tu llogaritur.

    Prandaj nje zgjidhje me e mire e problemit duhet te llogarise cdo element vetem nje here. Ka menyra te ndryshme per ta bere kete. Nje program ilustrativ (por jo profesional) eshte ky qe po jap me poshte. Nje pjese te kodit (kontrolli i te dhenave dhe shtypja e rezultatit) e kam kopjuar nga Edi.

    Kodi PHP:
    // Pascal3.cpp : Defines the entry point for the console application.
    //

    #include "stdafx.h"


    #include <iostream> 

    using namespace std

    unsigned int paskal(unsigned int rreshtiunsigned int elementi); 

    // funksioni: main 
    // merr: numrin e argumentave, argumentat 
    // argumenti i pare: adresa e programit 
    // argumenti i dyte: rreshti 
    // argumenti i trete: elementi 
    int main(int argcchar *argv[]) 

        
    // nqs jane me pak se tre argumenta 
        // nxjerrim mesazh gabimi dhe mbyllim programin 
        
    if( argc 
        { 
            
    cout << "Perdorimi: " << argv[0] << " rreshti elementi" << endl
            return 
    0
        } 
        
        
    // merr argumentin e rreshtit dhe elementit 
        // i shnderrojme ne int me funksionin atoi 
        
    unsigned int rreshti atoi(argv[1]); 
        
    unsigned int elementi atoi(argv[2]); 
        
        
    // kontrollojme nqs te dhenat jane te gabuara 
        // dhe nxjerrim mesazh, mbyllim programin 
        
    if( elementi || elementi rreshti 
        { 
            
    cout << "Gabim: Rreshti " << rreshti 
                
    << " nuk permban elementin " << elementi << endl;   
            return 
    0
        } 
        
        
    unsigned int rezultati paskal(rreshtielementi);
        
    cout << "Elementi " << elementi 
            
    << " ne rreshtin " << rreshti 
            
    << " eshte " << rezultati << endl
        
        
    // gjithcka mbaroi me sukses, mbyllim programin 
        
    return 0


    //Klase teper elementare. E programuar keshtu vetem per thjeshtesi programimi.
    //Mos e perdor per asnje program serioz
    class Matrica {
    public:
        
    Matrica(unsigned int rreshtaunsigned int kolona) {
            
    memorie = new unsigned int[rreshta kolona];
        }
        
    unsigned int getElement(unsigned int rreshtiunsigned int kolona) {
            return 
    memorie[kolona-+ (rreshti 1) * (kolona 1)];
        }
        
    void setElement(unsigned int rreshtiunsigned int kolonaunsigned int vlera) {
            
    memorie[kolona-+ (rreshti 1) * (kolona 1)] = vlera;
        }


    private:
        
    unsigned intmemorie;
    };

    unsigned int paskal(unsigned int rreshtiunsigned int elementi) {
        
    Matrica matrica(rreshtielementi);
        for(
    unsigned int i 1<= rreshtii++) {
            for(
    unsigned int j 1<= && <= elementij++) {
                if(
    j==|| i==j) {
                    
    matrica.setElement(ij1);
                } else {
                    
    unsigned int vlera matrica.getElement(i-1j-1) + matrica.getElement(i-1j);
                    
    matrica.setElement(ijvlera);
                }
            }
        }
        return 
    matrica.getElement(rreshtielementi);



    Ky program e llogarit elementin 4 ne rreshtin 2000 per me pak se 10 milisekonda, pra me shume se 100 mije here me shpejt se programi i Hasanit.
    Ndryshuar për herë të fundit nga IlirDeda : 18-11-2004 më 16:48

  9. #9
    63n700 Maska e werewolf
    Anëtarësuar
    03-10-2003
    Vendndodhja
    Rome
    Postime
    164
    normale qe do punoj me shpejte joti.
    sic e the dhe vete hasani e ka bere ne O(2^n) kurse ti duke perdorur tekniken e dynamic programming e ke bere ne O(n^2).
    Problemet qe japin per tu zgjidhur tek PR-TECH jane te lehte!
    Nese doni probleme me te bukur (dhe me te veshtire, normale) shkoni tek http://acm.uva.es/problemset/
    The truth may be out there, but lies are inside your head.

  10. #10
    Programues Softueresh Maska e edspace
    Anëtarësuar
    04-04-2002
    Vendndodhja
    Filadelfia, SHBA
    Postime
    2,565
    Zor se hedh njeri kod në forum tani.

    Kodi tënd punon shpejt por zë goxha memorje dhe për numra të mëdhenj ndodhin gabime në rezervimin e memorjes: This application has requested the runtime to terminate in an unusual way.

    Një pjesë e mirë e memorjes që rezervon nuk shfrytëzohet dhe shpejtësia e programit bie rëndshëm kur fillon përdorimi i memorjes virtuale.

    Për numrat e mëdhenj mendoj se do ishte më i përshtashëm përdorimi i një formule.
    Edi

Faqja 0 prej 2 FillimFillim 12 FunditFundit

Tema të Ngjashme

  1. Lasgush Poradeci
    Nga Bel ami në forumin Shkrimtarë shqiptarë
    Përgjigje: 76
    Postimi i Fundit: 06-04-2023, 23:24
  2. Odhise Paskali
    Nga dodoni në forumin Elita kombëtare
    Përgjigje: 7
    Postimi i Fundit: 24-01-2014, 01:52
  3. "Qyteterimi shqiptar"
    Nga murik në forumin Problematika shqiptare
    Përgjigje: 27
    Postimi i Fundit: 22-09-2006, 10:09

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