Pierwsza bitwa programistyczna 13501 10

O temacie

Autor Adanos

Zaczęty 1.08.2010 roku

Wyświetleń 13501

Odpowiedzi 10

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

Pierwsza bitwa programistyczna
2010-08-01, 09:06(Ostatnia zmiana: 2010-08-02, 18:33)
Witam!

Na wstępie napiszę, że kiedyś miałem to napisać w Pascalu, teraz wy to napiszecie w C/C++. :P

Czas trwania bitwy: od godziny 12 1. sierpnia do godziny 12 8. sierpnia.
Język: C/C++

Treść:
Napisz cztery funkcje, które mają za zadanie:
  • sprawdzanie, czy liczba n jest doskonała, tzn. czy jest równa sumie wszystkich jej podzielników mniejszych od niej samej, np. 28=1+2+4+7+14,
  • sprawdzenie, czy n jest liczba pierwszą,
  • sprawdzenie, czy n czytana od początku do końca i od końca do początku jest taka sama, np. 12321,
  • podanie rozkładu n na czynniki pierwsze

Dodatkowe wymagania:

W razie jakichś wątpliwości, pytajcie w tym temacie lub na PW.

Zapraszam wszystkich do udziału.

Powodzenia!

Aktualizacja: 2010-08-02 18:32 - dodanie możliwości użycia bibliotek cstdlib.h i iostream.h

DragonMaster

DragonMaster

Użytkownicy
posty20
  • Użytkownicy
Następnym razem daj do zrobienia coś w WinApi bo aplikacje konsolowe wyszły dawno z mody.
 





Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
I co z tego? To nie ma być aplikacja użytkownikowa.

oreca

oreca

Użytkownicy
posty196
Propsy72
Nagrody
Profesjabrak
  • Użytkownicy
Czyli math.h tez niemożna użyć?
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

Pierwsza bitwa programistyczna
#4 2010-08-03, 12:34(Ostatnia zmiana: 2010-08-03, 12:41)
A co chciałbyś z tego użyć? Myślę, że nie trzeba, a złożoność bez użycia pewnej funkcji w jednym miejscu(?) nie będzie taka tragiczna...

oreca

oreca

Użytkownicy
posty196
Propsy72
Nagrody
Profesjabrak
  • Użytkownicy
W sumie masz racje, nie jest to konieczne. ;]
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

Pierwsza bitwa programistyczna
#6 2010-08-08, 15:13(Ostatnia zmiana: 2010-08-12, 09:27)
Bitwa dobiegła końca. Decyzja w sprawie zwycięstwa była trudna, bo było tylko dwóch uczestników (oreca i LordSmarkula), a jakość programów była podobna i musiałem się "doszukać" czegoś, aby wskazać zwycięzcę. Tak więc minimalnie wygrał oreca.

Dziękuję uczestnikom wzięcia udziału, a zwycięzcy gratuluję zwycięstwa.

Skoro już po bitwie, to proszę o skomentowanie bitwy, zarówno przez uczestników, jak również przez tych, którzy nie brali udziału. Udział wzięły tylko dwie osoby. Zatem bitwa była za łatwa/trudna? Temat nie odpowiadał? Jakie były wg was plusy bitwy, a jakie minusy? Co byście w niej zmienili?

EDYCJA
Mój kod wzorcowy:
// *****************************************************************************
// ***                 Autor: Adanos                                         ***
// ***                 Nazwa programu: Pierwsza bitwa programistyczna        ***
// ***                 Nazwa pliku: bitwa_prog1.c                            ***
// ***                 Wersja: 2010-07-31                                    ***
// ***                 Język: C                                              ***
// ***                 Napisano w: Code::Blocks 8.02                         ***
// *****************************************************************************
// *****************************************************************************
// *** Program ma za zadanie sprawdzenie, czy:                               ***
// *** liczba n jest doskonała, tzn. czy jest równa sumie wszystkich jej     ***
// *** podzielników mniejszych od niej samej, np. 28=1+2+4+7+14.             ***
// *** sprawdzenie, czy n jest liczba pierwszą;                              ***
// *** sprawdzenie, czy n czytana od początku do końca i od końca do początku***
// *** jest taka sama, np. 12321;                                            ***
// *** podanie rozkładu n na czynniki pierwsze;                              ***
// *****************************************************************************
#include <stdio.h>
//#include <math.h>

/*
Funkcja doskonala(int liczba) sprawdza, czy podana liczba jest doskonała.
*/
bool doskonala(int liczba)
{
   int pom = 0; //zmienna pomocnicza, która dodaje wszystkie dzielniki zmiennej
               //liczba

   for (int i = 1; i<liczba/2+1; i++)
   {
      if (liczba % i == 0) //jeśli i jest dzielnikiem,
      {
         pom +=i; //to zwiększ pom
      }
   }

   return (liczba == pom); //zwracana wartość funkcji doskonala
}

char* odpowiedz(bool wynik) //funkcja do odpowiadanie na pytanie "Tak lub Nie"
{
   if (wynik == true)
      return "Tak";
   else return "Nie";
}

/*
Funkcja pierwsza(int liczba) sprawdza, czy liczba jest liczbą pierwszą.
*/
bool pierwsza(int liczba)
{
   bool pierwsza = true; //zmienna pomocnicza, zakładamy, że podana liczba jest
                         //liczbą pierwszą

   if (liczba < 2)
      pierwsza = false;
   /*else if (liczba == 2)
      return true;*/
   else
      for (int i = 2; i</*= sqrt(*/liczba/2+1/*)*/; i++)
      {
         if (liczba % i == 0) //jeśli liczba dzieli się przez i,
         {
            pierwsza = false; //to nie jest pierwsza
         }
      }

   return pierwsza; //zwracamy wynik
}

/*
Funkcja palindrom(char napis[]) sprawdza, czy napis[] czytany od początku do
końca i od końca do początku jest taki sam.
*/
bool palindrom(char napis[])
{
   int i = 0; //zmienna iteracyjna
   int dl = 0; //długość napisu

   bool palindrom = true; //zakładamy, że jest palindromem

   while (napis[dl++] != '\0'); //liczymy dlugość napisu

   dl--; //odejmujemy jeden, bo w pętli najpierw zwiększamy zmienną dl,
         //a póżniej sprawdzamy

   while((i < (dl / 2)) && palindrom) //sprawdzamy dopóki i jest mniejsze
   //od połowy napisu, a także wartość zmiennej palindrom jest true
   {
      palindrom = (napis[i]==napis[dl-i-1]);
      i=i+1;
   }

   return palindrom;
}

void czynniki_pierwsze(int liczba)
{
   int i=2;
   int pom = 1;

   printf("Czynniki pierwsze liczby %d:",liczba);

   while ((i<=liczba) && (pom != liczba))
      if (liczba % i == 0)
      {
         printf("%d, ",i);
         liczba/= i;
         pom*=i;
      }
      else i=i+1;

   //printf("\n");
}

int main()
{
   /*for (int i = 400; i<500; i++)
   {
      printf("Czy %d jest doskanała? ", i);
      printf("Odp: %s \n", odpowiedz(doskonala(i)));
   }*/

   /*for (int i = 1; i<100; i++)
   {
      printf("Czy %d jest pierwsza? ", i);
      printf("Odp: %s \n", odpowiedz(pierwsza(i)));
   }*/

   /*printf("Czy 12321 jest palindromem? ");
   printf("Odp: %s", odpowiedz(palindrom("12321")));*/

   for(int i =100; i< 1000; i++)
   {
      czynniki_pierwsze(i);
      printf("\n");
   }

   return 1;
}

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Na prośbę Buły umieszczam kody pozostałych:
-Oreca:
//*****************************************//
//**           Autor: Oreca              **//
//**           Język: C++                **//
//**   Ostatnia modyfikacja: 4.08.2010   **//
//*****************************************//

#include <stdio.h>

bool JestDoskonala(int liczba)
{
int suma = 0; //suma wszystkich dzielników
   
for(int i = 1; i <= liczba/2; ++i)
{
      if(liczba%i == 0) //Jesli liczba dzieli się bez reszty przez i to dodajemy ją do sumy
      {
          suma += i;
      }

}

    if(suma == liczba) //Sprawdzamy czy suma wszystkich dzielnikow jest taka sama jak liczba
        return true;
    else
        return false;
}


bool JestLiczbaPierwsza(int liczba)
{
         
for(int i = 2; i < liczba; i++) //Zmiennej "i" przypisujemy 2 po to aby pominac dzielenie przez 1 i uruchamiamy petle
{

     if(liczba%i == 0) //Jesli wynik z dzielenia przez jakakolwiek liczbę nie zwróci reszty oznacza to, ze liczba ma wiecej
     {                 //niz dwa dzielniki i nie jest liczba pierwsza
        return false;
     }            
}

return true;
       
}

int OdwrocLiczbe(int liczba)
{
int odw = 0; //liczba odwrocona

while(liczba != 0) //Rob dopoki liczba jest inna niz 0
{
    odw = (odw * 10) + (liczba % 10); //Wpierw mnozymy odw * 10 potem wyciagamy ostatnia liczbe i sumujemy wszystko czyli np
    //0 * 10 + 12345 % 10 = 0 + 5 = 5
    liczba /= 10; //Usuwamy ostatnia liczbe czyli np
    //12345 / 10 = 1234,5 my bierzemy tylko calosc czyli 1234
    //i tak dalej az do konca petli
}

return odw;          
}

bool JestTakaSama(int liczba)
{
     if(liczba == OdwrocLiczbe(liczba)) //Jesli liczba jest taka sama jak odwrocna liczba to funkcja zwraca true
     {
         return true;        
     }    
     else
     {
         return false;    
     }
     
}

void RozkladNaCzynnikiPierwsze(int liczba)
{
     
     if(liczba > 1)  //Sprawdzamy czy liczba jest wieksza od 1
     {
           printf("Rozklad liczby %i na czynniki pierwsze\n\n",liczba);
           for(int i = 2; i < liczba; i++) //Zaczynamay od 2 bo przez 1 niema sensu dzielic
           {
         
           while((liczba % i) == 0) //Dzielimy nasza liczbe dopoki dzielenie nie bedzie zwracac reszty
           {    //jezeli zwroci reszte to znak ze trzeba szukac innej liczby ktora sie dzieli
                  printf("%i|%i\n",liczba,i);
                  liczba /= i;
           }
           
           if(i > liczba) //Jezeli i jest wieksze od aktualnej liczby to konczymy petle
                break;
           
           }
           

           if(liczba > 1)//Jezeli nieda sie juz podzielic przez dwa to dzielimy przez pozostala liczbe
           {
               printf("%i|%i\n\n",liczba,liczba);
           }
      }

}

int main()
{
   
int liczba, wybor;
while(true)//Nieskonczona petla
{  
    printf("1 - Sprawdz czy dana liczba jest doskonala\n"
    "2 - Sprawdz czy dana liczba jest liczba pierwsza\n"
    "3 - Sprawdz czy odwrotnosc liczby jest taka sama jak dana liczba\n"
    "4 - Rozloz liczbe na czynniki pierwsze\n"
    "5 - Wyjscie\nWybor: ");
   
    if(!scanf("%d",&wybor))//Jezeli jakis debil wpisze litere to konczymy zabawe
    {
       return 0;
    }
   
    if(wybor == 5)//Jesli wybrano 5
    {
       return 0; //Konczymy program bo wybrano 5
    }
   
    printf("Podaj liczbe: ");
   
    if(!scanf("%d",&liczba))//Jezeli jakis debil wpisze litere to konczymy zabawe
    {
       return 0;
    }
     
    switch(wybor)
    {
     
         case 1:
         {
         
               if(JestDoskonala(liczba))
               {
                    printf("\nLiczba jest doskonala.\n\n");
               }
               else
               {
                    printf("\nLiczba nie jest doskonala.\n\n");
               }
               
               break;  

         }
         
         case 2:
         {
              if(JestLiczbaPierwsza(liczba))
              {
                   printf("\nLiczba jest liczba pierwsza.\n\n");                              
              }
              else
              {
                   printf("\nLiczba nie jest liczba pierwsza.\n\n");        
              }
             
              break;  

         }
         
         case 3:
         {
              if(JestTakaSama(liczba))
              {
                   printf("\nLiczba jest taka sama jak liczba czytana od konca.\n\n");                              
              }
              else
              {
                   printf("\nLiczba nie jest taka sama jak liczba czytana od konca.\n\n");        
              }
             
              break;  
     
         }
         
         case 4:
         {
              RozkladNaCzynnikiPierwsze(liczba);  
              break;                    
         }
                 
         default:
         {
            return 0; // Konczymy program
         }
   
    }
}
    return 0;
   
}

i

-LordSmarkula - LordSmarkula.h:
using namespace std;
//-------------------------------Liczba Doskonala------------------------------------------
bool LD(int n) //funkcja zwracająca argument prawdy lub fałszum, pobiera zmienną n
{
    int m=0; //Tworzy liczbę m, która będzie sumą wszystkich dzielników liczby n
    int p=(n/2)+1; //Tworzy zmienną o wartości połowy n+1, żaden dzielnik nie może być większy od połowy.
    for (int o=1; o<=p; o++)//Pętla trwająca aż liczba powtórzeń (jednocześnie sprawdzane dzielniki) nie przekroczy liczby p
    { if (n%o==0) //Jeśli reszta z dzielenia n prze o wynisi zero, znaczy to, że o jest dzielnikiem n.
       {m=m+o;}//dodajemy liczbę o do zmiennej m
    }
    if (m==n) // jeśli m (suma dzielmników) i n są sobie równe, oznacza to, że liczba n jest liczbą doskonałą
    {    
    return true; // funkcja zwraca warunek true
    }
   
    else
    {
     return false;//funkcja zwraca warunek false
     }
     
};
//--------------------------------Liczba Pierwsza----------------------------------------
bool LP(int n)
{
if (n==1)//sprawdza czy liczba n jest równa 1, jeśli tak zwraca argument false. W innym wypadku liczba 1 zostanie zwrócona jako liczba pierwsza. Można dodać dodatkowy warunek w pętli, jednak ten sposób jest oszczędniejszy
{return false;}
     int m = 0; // tworzymy zmienną która będzie zliczać ilość dzielników sprawdzanej liczby.
     for (int o=1; o<=(n/2); o++)//tworzymy pętlę, która będzie trwać, aż liczba o (kolejno sprawdzane dzielniki), nie przekroczy połowy liczby n (dzielnik, nie może być większy od połowy liczby), jeśli liczba dzielników jest równa 1, to liczba jest zwracana jako liczba pierwsza. Liczba dzielników liczby pierwszej jest równa 2, jednak w ten sposób oszczędzamy zasoby komputera, sprawdzając tylko dzielniki do połowy liczby, przez co liczby pierwsze będą miały tylko jeden dzielnik, powstaje w ten sposób problem z 1, który wykluczamy na początku programu.
     {   if (n%o==0)//sprawdza czy zmienna o jest dzielnikiem zmiennej n.
         {
            m=m+1;//jeśli jest dodajemy 1 do m.
            if(m==2)          //jeśli m jest równe dwa zwracamy argument false, ponieważ liczba ma więcej dzielników niż powinna mieć liczba pierwsza
            {return false;}
         }
     
     }  
  return true;   //Jeśli pętla zakończyła swoje działanie bez zwrócenia argumentu false, oznacza to, że liczba n jest liczbą pierwsza, zwracamy argument true.
};
//-----------------------------Liczba czytana od tyłu--------------------------------------

bool OT (string n) // ta funkcja w przeciwieństwie do innych pobiera string.
{
 
  string m; //tworzenie nowego, pustego stringa.
  int d;
  d=n.length(); //int o długości stringa, potrzebny do pętli
  char a; //pojedynczy char, pobierający znak z n, następnie wstawiany na koniec m.
  for (int p=1; p<d+1; p++) // pętla trwająca aż liczba powtórzeń nie przekroczy długości n
      {
         a=n.at(d-p);  //char a pobiera znak o położeniu d(długość stringa - ostatni znak) - liczba powtórzeniń. w ten sposób pobiera kolejno znaki od końca
         m+=a; // a nestępnie te znaki wstawiamy do m, dzięki czemu m, będzie odwrotnością n
   
      }
     
   if (n==m) // jeśli string n i m są sobie równe
  {return true;} //zwracamy argument true
   else//...
  {return false;}  
};
//----------------------------Rozkład na czynniki pierwsze---------------------------------
void CP (int n)//ta funkcja nic nie będzie zwracać dlatego jest void
{
     int v=0; // v będzie kolejno sprawdzanymi liczbami do czynnika pierwszego
     int x =0;//zmienna służąca do pętli do while, zmienna ta nie będzie w ogóle używana ponieważ z funkcji wychodzimy poprzez break
     int y=0;//zmienna, któa będzie sprawdzała czy n się zmieniała
     do
     {
         cout << n << '|'; //wypisuje aktualne n i pionową kreskę
         if (LP(n))//jeśli aktualne n jest liczbą pierwszą wypisze ją jako ostatni czynnik pierwszy i zakończy pętlę
         {cout << n << endl << '1' << '|' << endl << endl; break;}
         do
         {
           y=n; // y przyjmuje warstość n
           v++; // v wzrasta o jeden
           if (LP(v))// jeśli v jest liczbą pierwszą...
           {
              if (n%v==0)// to sprawdza, czy n jest podzielne przez v.
              {cout << v << endl; // jeśli tak to wypisuje v jako kolejny czynnik pierwszy i schodzi do następnego wiersza
              n=n/v;}//oraz dzieli n przez v
           }      
         }
         while(y==n);//pętla trwa dopóki y = n, gdy znajdziemy kolejny czynnik pierwszy n jest dzielone przez v, wtedy to równanie jest niepoprawne i wychodzi z tej pętli
         
         v--;//ponieważ kolejne czynnik pierwsze mogą być tylko większe, bądź równe poprzednim czynnikom pierwszym zamaiast zerować v i sprawdzać kolejno liczby od 1, to odejmujemu 1 od v (na początku pętli jest v++, więc musimy tutaj odjąć 1)
     }
     while(x==0); // tutaj warunek pętli jest spełniony cały czas, z pętli wychodzimy poprzez break;
};
oraz main.cpp:
#include <cstdlib>
#include <iostream>
#include "LordSmarkula.h"
using namespace std;

int main()
{ int p;
  int r=0;
  do
  {
    cout << "1-Sprawdzenie, czy liczba jest liczba doskonala \n2-Sprawdzenie czy liczba jest liczba pierwsza \n3-Sprawdzenie, czy liczba czytana odwrotnie jest ta sama liczba \n4-Rozklad liczby na czynniki pierwsze\n5-Zakonczenie programu\n";
    cin >> p;
    if (p>5)
    {
       system("CLS"); cout<< "Podano zle zadanie. \n";
    }
    else
    {
      if (p==1)
      {      system("CLS");
             cout << "Podaj liczbe do sprawdzenia.\n";
             int n;
             cin >> n;
             if (LD (n)) cout<<"Liczba " << n << " jest liczba doskonala.\n\n";
             else cout<<"Liczba " << n << " nie jest liczba doskonala.\n\n";
      }
      else if (p==2)
      {
           system("CLS");
             cout << "Podaj liczbe do sprawdzenia.\n";
             int n;
             cin >> n;
             if (LP (n)) cout<<"Liczba " << n << " jest liczba pierwsza.\n\n";
             else cout<<"Liczba " << n << " nie jest liczba pierwsza.\n\n";
           
      }
      else if (p==3)
      {
           system("CLS");
             cout << "Podaj liczbe do sprawdzenia.\n";
             string m;
             cin >> m;
             if (OT(m)) cout<<"Liczba " << m << " czytana od tylu jest ta sama liczba.\n\n";
             else cout<<"Liczba " << m << " czytana od tylu nie jest ta sama liczba.\n\n";
           
      }
      else if (p==4)
      {
           system("CLS");
             cout << "Podaj liczbe do sprawdzenia. \n";
             int n;
             cin >> n;
             CP (n);
      }
      else if (p==5) break;
    }
}while (r==0);

    system("PAUSE");
    return EXIT_SUCCESS;
}
Moja ocena z każdego z programów.
LordSmarkula:
Uwagi:
  • liczba doskonała:

* Zamiast tego:
   if (m==n) // jeśli m (suma dzielmników) i n są sobie równe, oznacza to, że liczba n     jest liczbą doskonałą
    {
    return true; // funkcja zwraca warunek true
    }

    else
    {
     return false;//funkcja zwraca warunek false
     }
można po prostu dać return (m==n); ;)
  • liczba pierwsza:

* 0 i ujemne są liczbami pierwszymi wg twojego programu, ale to szczegół ;)
* pętle for można zacząć od 2, wtedy m by się nie zwiększało, bo jeśli się znajdzie dzielnik liczby n między [2,n/2], to już nie jest pierwsza
  • palindrom:

* to samo co w liczbach pierwszych:
  if (n==m) // jeśli string n i m są sobie równe
  {return true;} //zwracamy argument true
   else//...
  {return false;}
  • czynniki pierwsze:

* niepotrzebne dwie pętle do-while, wystarczyłaby jedna
* niepotrzebne sprawdzanie, czy v jest pierwsza
* zawiesza się przy sprawdzaniu dzielników 1
  • ogólnie:

* pasowałoby robić jednowierszowe odstępy między inicjowaniem zmiennych a instrukcjami, czyli np.
   int zmienna;

   if (zmienna)
   {
   }
IMO zwiększa to czytelność
* dość dobrze skomentowany kod
[/list]

Oreca
Uwagi:
  • liczba doskonała:


* Zamiast tego
   if(suma == liczba) //Sprawdzamy czy suma wszystkich dzielnikow jest taka sama jak                      liczba
        return true;
    else
        return false;
   można po prostu dać return (suma == liczba); ;)
  • liczba pierwsza:

* 0 i ujemne są liczbami pierwszymi wg twojego programu, ale to szczegół ;)
* ale 1 też wg twojego programu jest...
* pętle for można skrócić do liczba/2 +1
  • palindrom:

w funkcji JestTakaSama można skrócić podobnie jak w funkcji JestDoskonala
  • czynniki pierwsze:

* niepotrzebne użycie dwóch pętli for, a w niej while i break; lepiej by było użyć petli while, a w niej instrukcji if
  • ogólnie

* dość dobrze skomentowany kod, ale pasowałoby w niektórych miejscach użyć wcięć ;)
* mała uwaga od twórców języka C (Kernighan, Ritchie) dotycząca tego:
         case 4:
         {
              RozkladNaCzynnikiPierwsze(liczba);
              break;
         }

         default:
         {
            return 0; // Konczymy program
         }
"Do dobrego stylu programowania należy wstawianie break po ostatniej instrukcji ostatniego przypadku, mimo że nie jest to konieczne. Pewnego dnia, gdy dopiszesz na końcu jakiś inny przypadek, ta odrobina zapobiegliwości może Cię uratować."
[/list]

Zysk

Zysk

Użytkownicy
posty606
Propsy451
  • Użytkownicy

Zysk

Pierwsza bitwa programistyczna
#8 2010-08-12, 12:13(Ostatnia zmiana: 2010-08-12, 12:33)
Cytat: Adanos link=topic=10971.msg106970#msg106970#msg106970#msg106970 date=1281597898
* dość dobrze skomentowany kod
ośmielę się nie zgodzić, kod jest tragicznie obkomentowany. Większość komentarzy nie ma żadnej wartości, bo po prostu pisze to samo co treść instrukcji przed nimi. komentarzy używamy, żeby pomóc osobie czytającej kod, ułatwić jej zrozumienie programu, ale zakładamy, że zna ona język programowania, więc piszemy tylko nieoczywiste rzeczy.

nie tak się pisze pliki nagłówkowe (.h).

zamiast i <= sqrt(w) zwykle lepiej jest napisać i*i <= w.

Adanos, nie należy się bać stosowania return w pętli. W ten sposób spada zarówno czytelność, jak i wydajność.
 

V3Q

V3Q

Złote Wrota
Kiedy mogę, to pomogę.
posty1256
Propsy410
  • Złote Wrota
  • Kiedy mogę, to pomogę.
PS. Podobno nie miało być pucharków jeżeli w bitwie bierze udział mniej niż 3. uczestników, ale to pierwsza bitwa programistyczna, więc może być  :wink:
 

Buła

Buła

Użytkownicy
wyłącz komputer i wyjdź z domu
posty2402
Propsy3163
NagrodyV
Profesjabrak
  • Użytkownicy
  • wyłącz komputer i wyjdź z domu
Bitwy programistyczne to jeszcze nowość, więc na zachętę pucharek dałem.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry