lut 18

Wrzucam kody kalkulatorów stworzone w trzech popularnych językach. Do stworzenia programu w Pascalu używałem kompilatora Turbo Pascal 7.0 (uruchamianie przez Ctrl+F9), do C++ korzystałem z Microsoft Visual Studio 2005 (F5 i potwierdzenie żeby skompilować), a kod we flashu stworzył Łukasz Jezior ;) Wcześniej już podałem podobny kod napisany w Code::Blocks – do zapoznania się z nim zapraszam tutaj.

Tutaj pobierzesz pliki .pas .cpp .swf i .html.

VN:F [1.8.2_1042]
Rating: 0.0/10 (0 votes cast)
VN:F [1.8.2_1042]
Rating: 0 (from 0 votes)

Napisane przez laptopik

paź 28

Sortowanie jest jednym z poważnych problemów programowania w każdym języku. Obecnie średnio najwydajniejszym algorytmem sortującym jest Quicksort.
Na początek zajmiemy się jednak stworzeniem własnego algorytmu. Zasada jego działania jest prosta. Program bierze każdy element tabeli po kolei i porównuje go z każdym innym elementem w tabeli. Jeśli napotka jakikolwiek większy element niż znajdujący się na końcu tablicy, zamienia go z tym ostatnim.

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5.  int main() {
  6. // deklaracja i wypełnienie tablicy
  7. int a[] = {9, 412, 22, 623, 666, 425, 248589789, 124, 4572, 148589789}; // 10 elementów
  8.  
  9. //sortowanie
  10. //zaczynamy poszukiwanie największej liczby od końca tablicy, dla każdego elementu wykonujemy czynność napisaną dalej
  11. //q reprezentuje indeks elementu tablicy
  12. for (int q=9; q>0; q–) {
  13. // q jest zmniejszane, ponieważ pomijamy w sprawdzaniu liczby które zostały określone jako największe wcześniej, q reprezentuje miejsce gdzie umieścimy największą wartość tego przebiegu
  14. // zmienna "najwieksza" przechowuje indeks elementu w tablicy z największą dotychczas znalezioną wartością
  15. // zakładamy od początku że jest to 0, by zacząć porównywanie od początku, to właśnie wartość znajdująca się w tym elemencie jest porównywana z każdym następnym
  16. int najwieksza=0;
  17.  
  18. for(int d=0; d<=q; d++) {
  19. // metoda "każda z każdą", dla danego elementu bierzemy każdy inny element tablicy, aż do q, bo w miejsce q ustawimy największą znalezioną wartość
  20. if (a[d]>a[najwieksza]) najwieksza=d;
  21. // jeśli dany element jest większą od obecnego zapisanego jako największy, poprawiamy indeks największej wartości
  22. }
  23. // bo wewnętrznym forze, podmieniamy największą znalezioną wartość z ostatnim elementem danego przebiegu (q)
  24. int s = a[q];
  25. a[q]=a[najwieksza];
  26. a[najwieksza] = s;
  27. }
  28.  
  29. //sprawdzenie
  30. // wyrzucamy na wyjście uporządkowane już elementy tablicy
  31. for(int n=0; i<10; i++) cout<<a[n]<<endl;
  32.  
  33. }

A teraz najszybszy algorytm Quicksort:
Jako argumenty przyjmuje on tablicę, indeks pierwszego elementu oraz  indeks ostatniego elementu:

  1. void quickSort(int arr[], int left, int right) {
  2. int i = left, j = right;
  3. int tmp;
  4. int pivot = arr[(left + right) / 2];
  5.  
  6. /* partition */
  7. while (i <= j) {
  8.   while (arr[i] < pivot) i++;
  9.   while (arr[j] > pivot) j–;
  10.   if (i <= j) {
  11.     tmp = arr[i];
  12.     arr[i] = arr[j];
  13.     arr[j] = tmp;
  14.     i++;
  15.     j–;
  16.   }
  17. };
  18.  
  19. /* recursion */
  20. if (left < j) quickSort(arr, left, j);
  21. if (i < right) quickSort(arr, i, right);
  22. }

Szczegółowy opis algorytmu Quicksort można znaleźć tutaj.

VN:F [1.8.2_1042]
Rating: 10.0/10 (1 vote cast)
VN:F [1.8.2_1042]
Rating: 0 (from 0 votes)

Napisane przez Don Daniello \\ tagi: , , ,

paź 03

Dobre pytanie, jak na przykład napisać kalkulator w C++ ? Zacznijmy od początku :)

Co to C++ ?

C++, inaczej cpp to język programowania wywodzący się z bardzo starego C. Jest to prawie najwydajniejszy język programowania, posiadający zarazem największe możliwości. Oczywiście na przykład pisząc w asemblerze, otrzymamy trochę wydajniejszy program (wykonujący szybciej operacje), jednak napisanie go zajmie dużo więcej czasu. Z drugiej skrajności, pisząc na przykład w Visual Basicu otrzymamy mniej wydajny program, jednak mniej zajmie napisanie go. Obecnie często spotykane jest korzystanie z bibliotek napisanych w języku asemblera w programach napisanych w C++ (dzięki temu wrażliwe instrukcje wykonywane są szybciej). Więcej o asemblerze tutaj. My zajmiemy się C++.

Co potrzeba do pisania programu w C++ ?

Napisany program w C++ (kod źródłowy) należy skompilować specjalnym programem zwanym kompilatorem aby otrzymać plik wynikowy ( program wykonywalny). Po skompilowaniu programu nie można uzyskać jego źródła (kompilacja jest nieodwracalna), dlatego należy pamiętać, by nie zgubić kodu źródłowego, w przeciwnym razie modyfikacja programu będzie niemożliwa i będzie trzeba zaczynać od początku. Kod w C++ jest jednakowy dla wszystkich systemów operacyjnych.

Kompilator

Dobrym kompilatorem, godnym polecenia jest obecnie Code::Blocks. Jest to IDE (Integrated Development Environment -> zintegrowane środowisko programistyczne). Zawiera podstawowe biblioteki, przyjazny, kolorujacy edytor tekstu i kompilatory. Jest bardzo prosty w użyciu. Jego strona domowa to http://codeblocks.org, jest dostępny pod Windowsem, Linuxem i MacOS’em.

Piszemy Kalkulator

Zaprezentuję tutaj gotowy kalkulator, ponieważ najlepiej uczyć się na przykładach. Kod jest “self-explained”, komentarze umieściłem w kodzie, wystarczy przeczytać.

  1. /*————————+
  2. |      Calculatorix       |
  3. |         v 1.0           |
  4. |   by DonDaniello.com    |
  5. +————————*/
  6. // Wszystko co jest umieszczone pomiędzy /* i */ nie jest brane pod uwagę przez kompilator, jest to tzw. komentarz wieloliniowy. Każda linia zaczynająca się od "//" jest komentarzem jednoliniowym (tak jak ta). Jest możliwość wpisania komentarza po kodzie tak jak poniżej. W takim wypadku kod jest brany pod uwagę tylko do "//".
  7.  
  8. #include <iostream> // ładujemy bibliotekę wejścia/wyjścia (input/output)
  9. #include <cmath> // ładujemy bibliotekę matematyczną
  10.  
  11. using namespace std; // używamy standardowych bibliotek do naszych odwołań
  12.  
  13. int main() // podstawowa funkcja programu, obowiązkowa
  14. {
  15. int dzialanie; // deklaracja zmiennej liczby całkowitej o nazwie dzialanie.
  16. double x, y, z; // deklaracja zmiennych liczb długich, niecałkowitych o nazwach x, y i z.
  17. // Zauważ, że prawie każde polecenie kończy się cudzysłowem.
  18.  
  19. cout << "Witaj w Calculatorix v 1.0 !"<<endl<<endl;
  20. // endl to funkcja zwracająca znak końca linii. "cout <<" oznacza przesłanie czegoś do standardowego wyjścia"
  21. while (true) { // pętla zawsze spełniona
  22. // wysyłamy tekst
  23. cout << "Dostepne dzialania:"<<endl;
  24. cout << "1 – Dodawanie"<<endl;
  25. cout << "2 – Odejmowanie"<<endl;
  26. cout << "3 – Mnozenie"<<endl;
  27. cout << "4 – Dzielenie"<<endl;
  28. cout << "5 – Potegowanie"<<endl;
  29. cout << "6 – Pierwiastkowanie"<<endl;
  30. cout << "7 – Wartosc absolutna"<<endl<<endl;
  31. cout << "Wybierz dzialanie do wykonania:";
  32. cin >> dzialanie; // przyjmujemy wybór działania
  33. cout << endl;
  34. switch (dzialanie) { // wybór działania
  35.  
  36. case 1: // jeśli podano jeden to:
  37. cout << "Podaj pierwsza liczbe: "; cin >> x;// cout << endl;
  38. cout << "Podaj druga liczbe: "; cin >> y;// cout << endl;
  39. z = x + y; // liczymy
  40. cout << x << " plus " << y << " rowna sie" << z << "." << endl << endl;
  41. break; // koniec przypadku
  42.  
  43. case 2:
  44. cout << "Podaj pierwsza liczbe: "; cin >> x;// cout << endl;
  45. cout << "Podaj druga liczbe: "; cin >> y;// cout << endl;
  46. z = x – y;
  47. cout << x << " minus " << y << " rowna sie " << z << "." << endl << endl;
  48. break;
  49.  
  50. case 3:
  51. cout << "Podaj pierwszy czynnik: "; cin >> x;// cout << endl;
  52. cout << "Podaj drugi czynnik: "; cin >> y;// cout << endl;
  53. z = x * y;
  54. cout << x << " razy " << y << " rowna sie " << z << "." << endl << endl;
  55. break;
  56.  
  57. case 4:
  58. cout << "Podaj dzielna liczbe: "; cin >> x;// cout << endl;
  59. cout << "Podaj dzielnik liczbe: "; cin >> y;// cout << endl;
  60. z = x / y;
  61. cout << x << " podzielone przez " << y << " rowna sie " << z << "." << endl << endl;
  62. break;
  63.  
  64. case 5:
  65. cout << "Podaj podstawe potegi: "; cin >> x;// cout << endl;
  66. cout << "Podaj wykladnik potegi: "; cin >> y;// cout << endl;
  67. z = pow (x, y);
  68. cout << x << " do potegi " << y << " rowna sie " << z << "." << endl << endl;
  69. break;
  70.  
  71. case 6:
  72. cout << "Podaj podstawe pierwiastka: "; cin >> x;// cout << endl;
  73. z = sqrt (x);
  74. cout << "Pierwiastek z " << y << " wynosi " << z << "." << endl << endl;
  75. break;
  76.  
  77. case 7:
  78. cout << "Podaj podstawe wartosci absolutnej: "; cin >> x;// cout << endl;
  79. z = abs (x);
  80. cout << "Wartosc absolutna liczby " << y << " wynosi " << z << "." << endl << endl;
  81. break;
  82.  
  83. default: cout<<endl<<"Bye Bye !"; return 0; break; // jeśli podano coś innego, wysyłamy tekst i wyłączamy program
  84. }
  85. }
  86. }

Kod bez komentarzy do pobrania tutaj: Calculatorix

VN:F [1.8.2_1042]
Rating: 0.0/10 (0 votes cast)
VN:F [1.8.2_1042]
Rating: 0 (from 0 votes)

Napisane przez Don Daniello \\ tagi: , ,