Darmowa publikacja dostarczona przez

Podobne dokumenty
Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy.

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Niniejszy ebook jest własnością prywatną.

Wprowadzenie do systemu Delphi

Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy.

Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Darmowa publikacja dostarczona przez

Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno:

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Obliczenie azymutu ze współrzędnych wersja C++ Builder

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Tablice, DataGridView

Delphi podstawy programowania. Środowisko Delphi

Wykład 7: Lazarus GUI

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

01 grid tablica grid. Copyright 2017, mgr inż. Janusz Bonarowski 1

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Języki programowania obiektowego Nieobiektowe elementy języka C++

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Podstawy programowania w języku C++

Pascal - wprowadzenie

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Darmowa publikacja dostarczona przez PatBank.pl - bank banków

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Amortyzacja obliczenia ekonomiczne w informatyce.

Podstawy programowania

1 Podstawy c++ w pigułce.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Programowanie obiektowe

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Podstawy Programowania C++

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Tablice. Jones Stygar na tropie zmiennych

Język programowania PASCAL

Algorytmy i struktury danych

Podstawy programowania

Programowanie obiektowe W3

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Rozdział 4 KLASY, OBIEKTY, METODY

Podstawy programowania obiektowego

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

ZASOBY ZMIENNYCH W STEROWNIKACH SAIA-BURGESS

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak:

Widok po uruchomieniu. Widok w trakcie gry

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Programowanie Wizualno Obiektowe - zajęcia 5 (PWO_BCPP_5_1) 1 Tworzenie plików pomocy Programowanie Wizualno Obiektowe Zajęcia 5, część 1

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Zaprojektuj grę logiczną NIM. Program losuje w każdym rzędzie od 1 do 10 grzybów. Gracz

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Lab 9 Podstawy Programowania

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Programowanie w środowisku graficznym. Ćwiczenia 01 Wprowadzenie do C++Builder VCL

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wykład 2 Składnia języka C# (cz. 1)

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Tworzenie własnych komponentów

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy Programowania 2

Informatyka 1. Przetwarzanie tekstów

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Algorytmika i pseudoprogramowanie

Ćwiczenie z wykorzystaniem zmiennych i komponentu TGauge. TTimer co pewien czas. Gra. A jednak odlicza. Stoper. Aktualny czas, czyli zegar

Wprowadzenie do języka Pascal

Delphi podstawy programowania. Pliki INI

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

AKADEMIA MORSKA W SZCZECINIE WI-ET / IIT / ZTT. Instrukcja do zajęc laboratoryjnych nr 1 AUTOMATYZACJA I ROBOTYZACJA PROCESÓW PRODUKCYJNYCH

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Luty 2001 Algorytmy (7) 2000/2001

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Darmowa publikacja dostarczona przez Złote Myśli

Zapisywanie algorytmów w języku programowania

Leszek Stasiak Zastosowanie technologii LINQ w

Transkrypt:

Powered by TCPDF (www.tcpdf.org) Ten ebook zawiera darmowy fragment publikacji "Programuję w Delphi i C++ Builder - cz.2" Darmowa publikacja dostarczona przez www.darmowe-ebooki.pl Copyright by Złote Myśli &, rok 2008 Autor: Tytuł: Programuję w Delphi i C++ Builder - cz.2 Data: 02.12.2011 Złote Myśli Sp. z o.o. ul. Toszecka 102 44-117 Gliwice www.zlotemysli.pl email: kontakt@zlotemysli.pl Niniejsza publikacja może być kopiowana, oraz dowolnie rozprowadzana tylko i wyłącznie w formie dostarczonej przez Wydawcę. Zabronione są jakiekolwiek zmiany w zawartości publikacji bez pisemnej zgody Wydawcy. Zabrania się jej odsprzedaży, zgodnie z regulaminem Wydawnictwa Złote Myśli. Autor oraz Wydawnictwo Złote Myśli dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo Złote Myśli nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wszelkie prawa zastrzeżone. All rights reserved.

SPIS TREŚCI Rozdział 8. Tablice...5 Deklarowanie tablic...5 Dostęp do elementów tablicy...11 Sito Eratostenesa...14 Tablice dwuwymiarowe...17 Sortowanie bąbelkowe...23 Tablice przechowują również teksty...28 Warto zapamiętać...42 Rozdział 9. Podprogramy...43 Co to są podprogramy...43 Definiujemy funkcje i procedury w języku Delphi...43 Definiujemy funkcje w języku C++ Builder...48 Programy mogą przekazywać podprogramom informacje...52 Przekazywanie parametrów przez wartość...54 Zmienne globalne i lokalne...58 Przekazujemy funkcjom i procedurom tablice...59 Rekurencja...68 Warto zapamiętać...75 Rozdział 10. Elementy grafiki...76 Wprowadzenie...76 Program Przykładowa grafika...85 Graficzny przykład programu rekurencyjnego...92 Warto zapamiętać...110 Rozdział 11. Przechowywanie informacji w rekordach i w strukturach...111 Rekordy i struktury...111 Warto zapamiętać...123 Rozdział 11. Elementy programowania obiektowego...124 Wprowadzenie...124 Hermetyzacja danych...147 Dziedziczenie...147 Polimorfizm...158 Rozdział 13. Operacje wejścia/wyjścia część II. Pliki...160 Wprowadzenie...160 C++ Builder...162 Pliki tekstowe...163 Zapisywanie rekordów i struktur do pliku...182 C++ Builder...191 Warto zapamiętać...200 Rozdział 14. Wskaźniki...202 Wprowadzenie...202 Wskaźniki i tablice...207 Programy mogą przekazywać podprogramom informacje ciąg dalszy...213 Przekazywanie parametrów przez wskaźnik...214 Przekazywanie parametrów przez referencję...217 Warto zapamiętać...219

Rozdział 15. Zmienne dynamiczne...220 Wprowadzenie...220 Zmienne dynamiczne do tablic...225 Klasy TStrings i TStringList...228 Warto zapamiętać...230 Rozdział 16. Algorytmy numeryczne...232 Obliczanie sumy szeregu...232 Wyznaczenie miejsca zerowego funkcji metodą Newtona...237 Wyznaczanie miejsca zerowego funkcji...244 Obliczanie całki metodą prostokątów...249 Dodatek...256 D1. Formatowanie łańcuchów tekstowych...256 D2. Wybrane systemowe procedury konwersji typu...258 D3. Standardowe procedury obsługujące pliki (Delphi)...260 D4. Wyświetlanie komunikatów...263 D5. Wartości parametru Flags dotyczące liczby i rodzaju przycisków...264 D6. Grafika w Delphi i w C++ Builder...268 Bibliografia...272

str. 5 Rozdział 8. Tablice W tym rozdziale dowiemy się, w jaki sposób deklarujemy tablice jedno- i dwuwymiarowe, na czym polega sortowanie bąbelkowe oraz o tym, że tablice przechowują nie tylko liczby, ale również teksty. Deklarowanie tablic Tablica jest to struktura danych, która umożliwia przechowywanie w sposób zorganizowany wielu zmiennych tego samego typu (całkowitego, rzeczywistego itd.). Aby stworzyć taką strukturę musimy dokonać deklaracji tablicy. W deklaracji tablicy musimy określić typ wartości, jaki ma przechowywać tablica, a także liczbę jej elementów. Tablice mogą być jednowymiarowe, dwuwymiarowe itd. Delphi Oto ogólna postać deklarowania w języku Delphi tablicy jednowymiarowej i związanej z nią zmiennej. type dentyfikator_tablicy = array[rozmiar_tablicy] of typ var nazwa_zmiennej : identyfikator_tablicy; Copyright by Złote Myśli &

str. 6 A oto przykład zadeklarowania tablicy jednowymiarowej o nazwie dane typu całkowitego, zawierającej 10 elementów. type tablica = array[1..10] of integer; var dane : tablica; możliwy jest również inny poprawny zapis: var dane : array[1..10] of integer; Dostęp do elementów tablicy jest realizowany za pośrednictwem indeksu, który wskazuje dany element. Dla deklaracji tablicy w języku Delphi zawartej poniżej: var dane : array[1..10] of integer; pierwszy element tablicy dane ma indeks 1, drugi element dostępny jest przez indeks 2 itd. Ostatni element tablicy ma indeks równy wymiarowi tablicy, czyli 10, co zilustrowano na rysunku poniżej. 1 2 3 4 5 6 7 8 9 10 Oto prosty przykład programu ilustrujący posługiwanie się tablicą jednowymiarową. Copyright by Złote Myśli &

str. 7 Program (Tablica1) Formularz Na formularzu wykonujemy następujące czynności: 1. umieszczamy dwa przyciski Button, jeden u góry z prawej strony (Button1) i jeden na dole również z prawej strony (Button2), 2. następnie klikamy myszą raz na Button1 i w Object Inspectorze zmieniamy we właściwościach (Properties) w Caption tekst Button1 na Zacznij, 3. klikamy myszą raz na Button2 i w Object Inspectorze zmieniamy we właściwościach (Properties) w Caption tekst Button2 na Zakończ, 4. z lewej górnej strony formularza umieszczamy komponent StringGrid, 5. dwukrotnie klikamy na formularzu przycisk Zakończ i podpinamy związaną z nim procedurę procedure TForm1.Button2Click(Sender: TObject); Close; 6. następnie dwukrotnie klikamy na formularzu przycisk Zacznij i podpinamy związaną z nim procedurę procedure TForm1.Button1Click(Sender: TObject), która została opisana w programie poniżej. Copyright by Złote Myśli &

str. 8 Rys. 8.1. Formularz skonstruowany dla programu Tablica1, na którym zamieszczono komponent StringGrid. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(tform) Button1: TButton; Button2: TButton; StringGrid1: TStringGrid; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private Private declarations public Public declarations Copyright by Złote Myśli &

str. 9 var Form1: TForm1; implementation $R *.dfm procedure TForm1.Button1Click(Sender: TObject); const n = 10; type tablica = array[1..n] of integer; var i : integer; dane : tablica; StringGrid1.ColCount:=2; // ustalenie ilosci kolumn StringGrid1.RowCount:=n+1; //ustalenie ilosci wierszy StringGrid1.Cells[0,0]:='Indeks tabl.'; StringGrid1.Cells[1,0]:='Wart. tabl.'; for i:=1 to n do StringGrid1.Cells[0,i]:=IntToStr(i); //opis wierszy for i:=1 to n do dane[i]:=i; StringGrid1.Cells[1,i]:=IntToStr(dane[i]); procedure TForm1.Button2Click(Sender: TObject); Close(); end. Copyright by Złote Myśli &

str. 10 C++ Builder Oto ogólna postać zadeklarowania w języku w C++ Builder tablicy jednowymiarowej i związanej z nią zmiennej. typ_tablicy nazwa_tablicy [rozmiar_tablicy] A oto przykład zadeklarowania tablicy jednowymiarowej o nazwie dane typu całkowitego, zawierającej 10 elementów: int dane [10]; Dostęp do elementów tablicy Dostęp do elementów tablicy jest realizowany za pośrednictwem indeksu, który wskazuje dany element. Dla deklaracji tablicy int dane [10]; aby uzyskać dostęp do pierwszego elementu tablicy dane, powinniśmy podać indeks 0 1, drugi element dostępny jest przez indeks 1 itd. Ostatni element tablicy ma indeks równy rozmiarowi tablicy minus 1, czyli 9, co zilustrowano na rysunku poniżej. 0 1 2 3 4 5 6 7 8 9 Oto prosty przykład ilustrujący posługiwanie się tablicą jednowymiarową. 1 Indeks pierwszego elementu tablicy w języku C++ wynosi zawsze 0. Copyright by Złote Myśli &

str. 11 Program (Tablica1) Formularz Na formularzu wykonujemy następujące czynności: 1. umieszczamy dwa przyciski Button, jeden u góry z prawej strony (Button1) i jeden na dole również z prawej strony (Button2), 2. następnie klikamy myszą raz na Button1 i w Object Inspectorze zmieniamy we właściwościach (Properties) w Caption tekst Button1 na Zacznij, 3. klikamy myszą raz na Button2 i w Object Inspectorze zmieniamy we właściwościach (Properties) w Caption tekst Button2 na Zakończ, 4. z lewej górnej strony formularza umieszczamy komponent StringGrid, 5. dwukrotnie klikamy na formularzu przycisk Zakończ i podpinamy związaną z nim funkcję void fastcall TForm1::Button2Click(TObject *Sender) Close(); 6. następnie dwukrotnie klikamy na formularzu przycisk Zacznij i podpinamy związaną z nim funkcję void fastcall TForm1::Button1Click(TObject *Sender), która została opisana w programie poniżej. Copyright by Złote Myśli &

str. 12 #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) void fastcall TForm1::Button1Click(TObject *Sender) const n=10; int i; int dane[10]; StringGrid1->ColCount=2; //ustalenie ilosci kolumn StringGrid1->RowCount=n+1; //ustalenie ilosci wierszy StringGrid1->Cells[0][0]="Indeks tablicy"; StringGrid1->Cells[1][0]="Wart. tabl."; for (i=0; i<10; i++) StringGrid1->Cells[0][i+1]=IntToStr(i); //opis wierszy for (i=0; i<10; i++) dane[i]=i; StringGrid1->Cells[1][i+1]=IntToStr(dane[i]); Copyright by Złote Myśli &

str. 13 void fastcall TForm1::Button2Click(TObject *Sender) Close(); Sito Eratostenesa Około roku 200 p.n.e. matematyk grecki Eratostenes podał algorytm na znajdowanie liczb pierwszych. Liczby pierwsze to są liczby naturalne większe od 1, które dzielą się przez siebie i przez 1. Nazwa tego najstarszego algorytmu na znajdowanie liczb pierwszych pochodzi od sposobu, w jaki te liczby są znajdowane. Wszystkie liczby po kolei przesiewa się, usuwając z spośród nich wszystkie wielokrotności danej liczby. Zilustrujemy to przykładem, znajdując za pomocą sita Eratostenesa wszystkie liczby pierwsze z zakresu od 2 do 30, które umieścimy w tabeli poniżej. 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Liczba 2 jest liczbą pierwszą, pozostałe znajdujemy po usunięciu z tabeli wielokrotności liczby 2 (gdyż nie są to liczby pierwsze) otrzymując: 2 3 * 5 * 7 * 9 * 11 * 13 * 15 * 17 * 19 * 21 * 23 * 25 * 27 * 29 * Copyright by Złote Myśli &

str. 14 Kolejny etap polega na usunięciu z tabeli po liczbie 3 (przyjmuje się, że jest to liczba pierwsza) wielokrotności liczby 3. Rezultat tego działania znajduje się poniżej: 2 3 * 5 * 7 * * * 11 * 13 * * * 17 * 19 * * * 23 * 25 * * * 29 * Z pozostałych teraz liczb kolejną po 2 i 3 jest liczba 5, którą pozostawia się wykreślając wszystkie liczby podzielne przez 5: 2 3 * 5 * 7 * * * 11 * 13 * * * 17 * 19 * * * 23 * * * * * 29 * Kontynuując to wykreślanie dojdziemy do sytuacji, kiedy zostaną wykreślone wszystkie liczby, które nie są pierwsze i pozostaną tylko liczby pierwsze. W tym momencie możemy zakończyć nasze poszukiwania liczb pierwszych pamiętając, że kolejne wykreślenia należy powtarzać, nie dalej jak do liczby będącej zaokrąglonym w dół pierwiastkiem kwadratowym ze zmiennej zakres. W naszym przykładzie jest to: sqrt(30)=5.477.., po zaokrągleniu w dół 2 otrzymujemy liczbę 5. W tabeli pozostały już tylko liczby pierwsze, które wyświetlamy na ekranie. Górny zakres, dla którego chcemy odnaleźć liczby pierwsze wyznaczony jest tylko rozmiarem tablicy. W naszym programie jest to: 2 W języku C++ Builder realizuje to matematyczna funkcja floor(), która znajduje się w pliku nagłówkowym math.h. Copyright by Złote Myśli &

str. 15 int tablica[10000]; Chcąc zmienić ten zakres, należy zmienić rozmiar tablicy. C++ Builder (Sito) #include <vcl.h> #include <math.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) void fastcall TForm1::Button2Click(TObject *Sender) Close(); void fastcall TForm1::Button1Click(TObject *Sender) int i,j,zakres,zm_pom; int tablica[10000]; zakres=strtoint(inputbox("podaj gorny zakres liczb Copyright by Złote Myśli &

str. 16 pierwszych","maksymalny gorny zakres wynosi 9999","")); zm_pom = floor(sqrt(zakres)); for (i=1; i<=zakres; i++) tablica[i]=i; for (i=2; i<=zm_pom; i++) if (tablica[i]!=0) for (j=i+1; j<=zakres; j++) if (j%i==0) tablica[j]=0; ListBox1->Items->Clear(); ListBox1->Items->Add("Liczby pierwsze z zakresu od 1 do "+IntToStr(zakres)+" to"); for (i=2; i<=zakres; i++) if (tablica[i]!=0) ListBox1->Items->Add(IntToStr(i)); Tablice dwuwymiarowe Tablice dwuwymiarowe deklarujemy analogicznie jak tablice jednowymiarowe. Ilustrują to poniższe przykłady. Tablice wielowymiarowe deklarujemy analogicznie. Delphi A oto program napisany w języku Delphi, który w zadeklarowanej tablicy dwuwymiarowej 10x10 umieszcza na przekątnej jedynki, a poza przekątną zera. W programie skorzystaliśmy z komponentu StringGrid. Copyright by Złote Myśli &

str. 17 Program (Tablica2) formularz jak na Rys. 8.1. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids; type TForm1 = class(tform) Button1: TButton; Button2: TButton; StringGrid1: TStringGrid; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private Private declarations public Public declarations var Form1: TForm1; implementation $R *.dfm procedure TForm1.Button1Click(Sender: TObject); const n = 10; type macierz = array[1..n, 1..n] of integer; Copyright by Złote Myśli &

str. 18 var i, j : integer; tablica : macierz; StringGrid1.ColCount:=n+1; //ustalenie ilosci kolumn tabeli StringGrid1.RowCount:=n+1; //ustalenie ilosci wierszy tabeli StringGrid1.DefaultColWidth:=25; //ustalenie wysokosci komorki StringGrid1.DefaultRowHeight:=25; //ustalenie szerokosci komorki for i:=1 to n do StringGrid1.Cells[i,0]:=IntToStr(i); StringGrid1.Cells[0,i]:=IntToStr(i); wpisywanie do tablicy 1 na przekątnej, a 0 poza przekątną for i:=1 to n do for j:=1 to n do if i = j then tablica[i,j]:=1 else tablica[i,j]:=0 j i Koniec wpisywania Wydruk zawartosci tablicy for i:=1 to n do for j:=1 to n do StringGrid1.Cells[i,j]:= IntToStr(tablica[i,j]); Copyright by Złote Myśli &

str. 19 j i Koniec wydruku procedure TForm1.Button2Click(Sender: Tobject); Close(); end. Rys. 8.2. Rezultat działania programu Tablica2 napisanego w języku Delphi. Zachęcamy Czytelnika, aby dodatkowo wzbogacił program o obliczanie sumy elementów znajdujących się na przekątnej. C++ Builder A oto program napisany w języku C++ Builder, który w zadeklarowanej tablicy dwuwymiarowej 10x10 umieszcza na przekątnej jedynki, a poza przekątną zera. W programie skorzystaliśmy z komponentu StringGrid. Copyright by Złote Myśli &

str. 20 Język C++ Builder (Tablica2) formularz jak na Rys. 8.2. #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) void fastcall TForm1::Button1Click(TObject *Sender) const n=11; int i, j, suma; int macierz[11][11]; StringGrid1->ColCount=n; //ustalenie ilosci kolumn StringGrid1->RowCount=n; //ustalenie ilosci wierszy StringGrid1->DefaultColWidth=25; //ustalenie szerokosci komorki StringGrid1->DefaultRowHeight=25; //ustalenie szerokosci komorki for (i=0; i<=n; i++) //opis tablicy StringGrid1->Cells[i+1][0]=IntToStr(i); StringGrid1->Cells[0][i+1]=IntToStr(i); Copyright by Złote Myśli &

str. 21 //wpisywanie 1 na przekatnej, a poza przekatna zero for (i=0; i<n; i++) for (j=0; j<n; j++) if (i==j) macierz[i][j]=1; // wpisanie 1 na przekatnej else macierz[i][j]=0; // wpisanie 0 poza przekatna //koniec wpisywania //wyswietlanie tablicy for (i=0; i<n; i++) for (j=0; j<n; j++) StringGrid1->Cells[i+1][j+1]=IntToStr(macierz[i][j]); void fastcall TForm1::Button2Click(TObject *Sender) Close(); Zachęcamy Czytelnika, aby dodatkowo wzbogacił program o obliczanie sumy elementów znajdujących się na przekątnej. Copyright by Złote Myśli &

str. 22 Sortowanie bąbelkowe Następny program, który wykorzystuje tablice nazywa się Bąbelki. Metoda sortowania bąbelkowego opiera się na zasadzie porównywania i zamiany par sąsiadujących ze sobą liczb, do chwili ustawienia ich w kolejności od najmniejszej do największej. Wynika to stąd, że warunkiem uporządkowania jest jednoczesne udostępnienie wszystkich liczb (w programie jest ich 6). Jeśli potraktujemy zadane liczby jako element pionowej tablicy jednowymiarowej, to przy pewnej dozie wyobraźni możemy je uważać za znajdujące się w naczyniu z wodą bąbelki o wadze proporcjonalnej do ich wielkości. Rezultatem każdego przejścia przez tablicę będzie wypchnięcie bąbelka na poziom odpowiadający jego wadze. Tabela 8.1. Przebieg sortowania bąbelkowego po kolejnych przejściach dla 6 ustalonych liczb Ustawienie początkowe Pierwsze przejście Drugie przejście Trzecie przejście Czwarte przejście Piąte przejście 574 8 8 8 8 8 303 574 23 23 23 23 34 303 574 34 34 34 125 34 303 574 125 125 8 125 34 303 574 303 23 23 125 125 303 574 A oto program w Delphi, który zawiera algorytm sortowania bąbelkowego. Copyright by Złote Myśli &

str. 23 Delphi (Bąbelki) formularz jak na Rys. 8.1. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(tform) Button1: TButton; StringGrid1: TStringGrid; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private Private declarations public Public declarations var Form1: TForm1; implementation $R *.dfm procedure TForm1.Button1Click(Sender: TObject); var liczby : array[1..6] of integer; x, i, j, k : integer; StringGrid1.ColCount:=7; //ustalenie ilosci kolumn StringGrid1.RowCount:=7; StringGrid1.Cells[1,0]:='Ust. pocz.'; Copyright by Złote Myśli &

str. 24 for i:=1 to 6 do StringGrid1.Cells[i+1,0]:=IntToStr(i)+' przejscie'; liczby[1]:=574; liczby[2]:=303; liczby[3]:=34; liczby[4]:=125; liczby[5]:=8; liczby[6]:=23; for j:=1 to 6 do StringGrid1.Cells[1,j]:=IntToStr(liczby[j]); for i:=2 to 6 do for j:=6 downto i do if liczby[j-1]>liczby[j] then x := liczby[j-1]; liczby[j-1]:= liczby[j]; liczby[j] := x; for k:=i to 6 do StringGrid1.Cells[k,j-1]:=IntToStr(liczby[j-1]); StringGrid1.Cells[k,j]:=IntToStr(liczby[j]); procedure TForm1.Button2Click(Sender: TObject); close; end. Copyright by Złote Myśli &

str. 25 C++ Builder (Bąbelki) formularz jak na Rys. 8.1. #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) void fastcall TForm1::Button1Click(TObject *Sender) int x, i, j, k; int liczby[6]; StringGrid1->ColCount=7; //ustalenie ilosci kolumn StringGrid1->RowCount=7; //ustalenie ilosci wierszy StringGrid1->Cells[1][0]="Ust. pocz."; for (i=1; i<=6; i++) StringGrid1->Cells[i+1][0]=IntToStr(i)+" przejscie"; liczby[0]=574; liczby[1]=303; liczby[2]=34; liczby[3]=125; liczby[4]=8; Copyright by Złote Myśli &

str. 26 liczby[5]=23; for (j=0; j<=5; j++) StringGrid1->Cells[1][j +1]=IntToStr(liczby[j]); //ust.poczatkowe for (i=1; i<=5; i++) for(j=5; j>=i; --j) if (liczby[j-1] > liczby[j]) x = liczby[j-1]; liczby[j-1]=liczby[j]; liczby[j]= x; for (k=i; k<=5; k++) StringGrid1->Cells[k+1][j]=IntToStr(liczby[j-1]); StringGrid1->Cells[k+1][j+1]=IntToStr(liczby[j]); //k //j //i void fastcall TForm1::Button2Click(TObject *Sender) Close(); Copyright by Złote Myśli &

str. 27 Tablice przechowują również teksty Tablice przechowują nie tylko liczby, ale również teksty (ang. strings). Teksty są bardzo użyteczne w programach, gdyż mogą przechowywać informacje takie jak nazwy plików, tytuły książek, nazwiska pracowników i inne ciągi określonych znaków. Delphi W języku Turbo Pascal typ łańcuchowy (tekstowy) był ciągiem znaków (tekstem) poprzedzonym liczbą, która wskazywała rozmiar tego łańcucha. Ponieważ długość łańcucha mieściła się w jednym bajcie, to łańcuch mógł mieć maksymalnie tylko 255 znaków. 32- bitowa wersja Delphi ma dodatkowo wbudowany typ długich łańcuchów tekstowych. W Delphi istnieją trzy typy łańcuchów tekstowych: 1. typ ShortString, który odpowiada dawnym typom łańcuchowym w języku Turbo Pascal, 2. typ ANSIString odpowiada nowym, o zmiennej długości łańcuchom tekstowym z dynamicznym przydziałem pamięci rozmiar tych łańcuchów jest praktycznie nieograniczony, 3. typ WideString jest podobny do typu ANSIString, również z dynamicznym przydziałem pamięci, lecz jest oparty na znakach typu WideChar, który obsługuje znaki wielobajtowe system Unicode. Z łańcuchami związany jest szereg praktycznych funkcji (dostarczonych przez producentów oprogramowania) pozwalających na swobodne operacje na tekstach. Zilustrujemy to odpowiednimi przykładami, zachęcając Czytelnika do samodzielnego eksperymentowania z pozostałymi funkcjami. Copyright by Złote Myśli &

str. 28 Pierwszy z programów - Długość łańcucha - umożliwia odczytywanie długości łańcucha zapamiętanego w odpowiedniej zmiennej. Delphi (Długość Łańcucha) Formularz Na formularzu wykonujemy następujące czynności: 1. umieszczamy dwa przyciski Button, jeden u góry (Button1) i jeden na dole z prawej strony (Button2), 2. następnie klikamy myszą raz na Button1 i w Object Inspectorze zmieniamy we właściwościach (Properties) w Caption tekst Button1 na Zacznij, 3. klikamy myszą raz na Button2 i w Object Inspectorze zmieniamy we właściwościach (Properties) w Caption tekst Button2 na Zakończ, 4. u góry formularza z jego lewej strony umieszczamy komponent Edit, w Object Inspectorze usuwamy słowo Edit1 we właściwościach (Properties) w Text. 5. na dole formularza z jego lewej strony umieszczamy komponent ListBox, 6. dwukrotnie klikamy na formularzu przycisk Zakończ i podpinamy związaną z nim procedurę procedure TForm1.Button2Click(Sender: TObject); Close; Copyright by Złote Myśli &

str. 29 7. następnie dwukrotnie klikamy na formularzu przycisk Zacznij i podpinamy związaną z nim procedurę procedure TForm1.Button1Click(Sender: TObject), która została opisana w programie poniżej. Wydruk całego programu. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(tform) Button1: TButton; Edit1: TEdit; ListBox1: TListBox; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private Private declarations public Public declarations var Form1: TForm1; Copyright by Złote Myśli &

str. 30 implementation $R *.dfm procedure TForm1.Button1Click(Sender: TObject); var imie : AnsiString; nazwisko : AnsiString; Edit1.Text:='Program mierzy długosc łancucha imie i nazwisko'; imie:=inputbox('','podaj imie',''); nazwisko:=inputbox('','podaj nazwisko',''); ListBox1.Items.Clear; ListBox1.Items.Add('Imie '+imie+' zawiera '+IntToStr(Length(imie))+' liter(y).'); ListBox1.Items.Add('Nazwisko '+nazwisko+' zawiera '+IntToStr(Length(nazwisko))+' liter(y).'); procedure TForm1.Button2Click(Sender: TObject); Close; end. W programie powyżej skorzystaliśmy z gotowej funkcji Length(zmienna_łańcuchowa). Wynikiem jest długość łańcucha znaków zmienna_łańcuchowa, czyli liczba przedstawiająca liczbę znaków, z których się on składa. Wynik jest typu integer. Copyright by Złote Myśli &

str. 31 C++ Builder Język C++ Builder dostarcza nowego mechanizmu obsługi łańcuchów znaków klasę AnsiString. Klasa ta posiada szereg metod, które umożliwiają obsługę łańcuchów znakowych (zobacz: Dorobek, 2002). Oto przykład zadeklarowania dwóch zmiennych klasy AnsiString: AnsiString imie, nazwisko; Program (Długość łańcucha) umożliwia odczytywanie długości łańcucha zapamiętanego w odpowiedniej zmiennej. Formularz Na formularzu wykonujemy następujące czynności: 1. umieszczamy dwa przyciski Button, jeden u góry (Button1) i jeden na dole z prawej strony (Button2), 2. następnie klikamy myszą raz na Button1 i w Object Inspectorze zmieniamy we właściwościach (Properties) w Caption tekst Button1 na Zacznij, 3. klikamy myszą raz na Button2 i w Object Inspectorze zmieniamy we właściwościach (Properties) w Caption tekst Button2 na Zakończ, 4. u góry formularza z jego lewej strony umieszczamy komponent Edit, w Object Inspectorze usuwamy słowo Edit1 we właściwościach (Properties) w Text. 5. na dole formularza z jego lewej strony umieszczamy komponent ListBox, 6. dwukrotnie klikamy na formularzu przycisk Zakończ i podpinamy związaną z nim funkcję void fastcall Copyright by Złote Myśli &

str. 32 TForm1::Button2Click(TObject *Sender) Close(); 7. następnie dwukrotnie klikamy na formularzu przycisk Zacznij i podpinamy związaną z nim funkcję void fastcall TForm1::Button1Click(TObject *Sender), która została opisana w programie poniżej. Wydruk całego programu. #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) void fastcall TForm1::Button1Click(TObject *Sender) Copyright by Złote Myśli &

str. 33 AnsiString imie, nazwisko; Edit1->Text="Program mierzy dlugosc lancucha imie i nazwisko"; imie=inputbox("","podaj imie", ""); nazwisko=inputbox("","podaj nazwisko", ""); ListBox1->Items->Clear(); ListBox1->Items->Add("Imie "+imie+ " zawiera "+IntToStr(imie.Length())+" liter(y)."); ListBox1->Items->Add("Nazwisko "+nazwisko+ " zawiera "+IntToStr(nazwisko.Length())+" liter(y)."); void fastcall TForm1::Button2Click(TObject *Sender) Close(); W programie skorzystaliśmy z metody Length() klasy AnsiString. W następnym przykładzie wykorzystamy możliwości składania łańcuchów. Łączenie łańcuchów (konkatenacja) w języku Delphi umożliwia nam funkcja Concat(łańcuch_1, łańcuch_2, łańcuch_n), która łączy kilka łańcuchów w jeden łańcuch. Musimy pamiętać, że składanie różnych łańcuchów nie jest przemienne, co łatwo możemy sprawdzić wprowadzając łańcuchy ma i ta. Copyright by Złote Myśli &

str. 34 Delphi (Concat) formularz jak wyżej. unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(tform) Button1: TButton; Edit1: TEdit; ListBox1: TListBox; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private Private declarations public Public declarations var Form1: TForm1; implementation $R *.dfm procedure TForm1.Button1Click(Sender: TObject); var lancuch_1 : AnsiString; lancuch_2 : AnsiString; Copyright by Złote Myśli &

str. 35 Edit1.Text:='Program dodaje dwa łancuchy'; lancuch_1:=inputbox('','podaj pierwszy tekst',''); lancuch_2:=inputbox('','podaj drugi tekst',''); ListBox1.Items.Clear; ListBox1.Items.Add('Po dodaniu lancuch_1 + lancuch_2 -> '+Concat(lancuch_1,lancuch_2)); ListBox1.Items.Add('Po dodaniu lancuch_2 + lancuch_1 -> '+Concat(lancuch_2,lancuch_1)); ListBox1.Items.Add(''); ListBox1.Items.Add('Składanie łancuchow nie jest przemienne'); procedure TForm1.Button2Click(Sender: TObject); Close; end. C++ Builder (Concat) formularz jak wyżej. #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) Copyright by Złote Myśli &

str. 36 void fastcall TForm1::Button1Click(TObject *Sender) AnsiString lancuch_1, lancuch_2; Edit1->Text="Program dodaje 2 lancuchy"; lancuch_1=inputbox("","podaj pierwszy tekst", ""); lancuch_2=inputbox("","podaj drugi tekst", ""); ListBox1->Items->Clear(); ListBox1->Items->Add("Po dodaniu lancuch_1+lancuch_2->"+(lancuch_1+lancuch_2)); ListBox1->Items->Add("Po dodaniu lancuch_2+lancuch_1->"+(lancuch_2+lancuch_1)); ListBox1->Items->Add(""); ListBox1->Items->Add("Skladanie lancuchow nie jest przemienne"); void fastcall TForm1::Button2Click(TObject *Sender) Close(); Na koniec zaproponujemy następujące zadanie: Mając na wejściu ciąg napisów np. qqqq, asd, asdgfter, wgee, yuiyu, weerw, f, ytu4df należy wyprowadzić elementy o nieparzystej długości oraz długość i nr elementu najdłuższego i najkrótszego 3. Rozwiązanie dla obu języków programowania znajduje się poniżej. 3 Odpowiedź: na wyjściu powinniśmy otrzymać następujące wynik asd, yuiyu, weerw, f, 8, 3, 1, 7. Copyright by Złote Myśli &

str. 37 Delphi (Zadanie) unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(tform) Button1: TButton; Button2: TButton; ListBox1: TListBox; procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private Private declarations public Public declarations var Form1: TForm1; implementation $R *.dfm procedure TForm1.Button2Click(Sender: TObject); Close; procedure TForm1.Button1Click(Sender: TObject); Copyright by Złote Myśli &

str. 38 var tekst: array[1..8] of string; i, max, min, j, k : integer; tekst[1]:='qqqq'; tekst[2]:='asd'; tekst[3]:='asdgfter'; tekst[4]:='wgee'; tekst[5]:='yuiyu'; tekst[6]:='weerw'; tekst[7]:='f'; tekst[8]:='ytu4df'; max:=1; min:=1; ListBox1.Items.Clear(); for i:=1 to 8 do if (Length(tekst[i]) mod 2 <> 0)then ListBox1.Items.Add(tekst[i]); if max < Length(tekst[i]) then max:=length(tekst[i]); j:=i; if Length(tekst[i]) <= min then min:=length(tekst[i]); k:=i; ListBox1.Items.Add(IntToStr(max)+' '+IntToStr(j)+' '+IntToStr(min)+' '+IntToStr(k)); end. Copyright by Złote Myśli &

str. 39 C++ Builder (Zadanie) #include <vcl.h> #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) void fastcall TForm1::Button2Click(TObject *Sender) Close(); void fastcall TForm1::Button1Click(TObject *Sender) AnsiString tekst[8][9]; int i, max, min, j, k, l; tekst[0][8]="qqqq"; tekst[1][8]="asd"; tekst[2][8]="asdgfter"; tekst[3][8]="wgee"; tekst[4][8]="yuiyu"; tekst[5][8]= "weerw"; tekst[6][8]="f"; tekst[7][8]="ytu4df"; Copyright by Złote Myśli &

str. 40 max=1; min=1; ListBox1->Items->Clear(); for (i=0; i < 8; i++) for(j=0; j < 9; j++) if (IntToStr(tekst[i][j].Length()) % 2!= 0) ListBox1- >Items->Add(tekst[i][j]); if (max < IntToStr(tekst[i][j].Length())) max = StrToInt(tekst[i][j].Length()); k=i; if (IntToStr(tekst[i][j].Length()) == min) min = StrToInt(tekst[i][j].Length()); l=i; //j //i ListBox1->Items->Add(IntToStr(max)+" "+IntToStr(k +1)+" "+IntToStr(min)+" "+IntToStr(l+1)); Copyright by Złote Myśli &

str. 41 Warto zapamiętać 1. Tablica to taka struktura danych, która umożliwia jednej zmiennej przechowywanie wielu wartości tego samego typu. 2. Deklarując tablicę musimy określić typ wartości, jakie ma ona przechowywać, a także liczbę jej elementów. 3. Wszystkie elementy zadeklarowanej tablicy są tego samego typu. 4. Wstawienie elementu do tablicy odbywa się w programie poprzez podanie numeru indeksu w tablicy, pod którym dana wartość ma być umieszczona. 5. Uzyskanie dostępu do wartości przechowywanej w tablicy odbywa się w programie poprzez podanie nazwy tablicy i numeru elementu. 6. Tablice przechowują również teksty. Copyright by Złote Myśli &

Powered by TCPDF (www.tcpdf.org) Dlaczego warto mieć pełną wersję? Jak szybko poznać elementy programowania w tych dwóch językach? (dla bardziej zaawansowanych) Standardową metodą jest uczenie się programowania "język po języku". A co powiesz na dwa w jednym? Co gdybyś przy okazji zagłębiania się w szczegóły danej instrukcji w Delphi dowiedział się od razu, jak to samo robi się w C++ Builderze? Te dwa środowiska programistyczne dominują teraz w firmach, to w nich powstaje większość spersonalizowanych aplikacji bazodanowych dla małych i średnich przedsiębiorstw. Odkryj coś, co pozwoli Ci w łatwy sposób budować aplikacje wyglądające jak profesjonalne programy pod Windows... Delphi i C++ Builder to 32-bitowe, w pełni obiektowe, zintegrowane środowiska RAD (ang. Rapid Application Development) do szybkiego tworzenia aplikacji w systemie operacyjnym Windows. W publikacji znajdziesz m. in.: 1. Tablice Dowiesz się, w jaki sposób deklarujemy tablice jedno- i dwuwymiarowe oraz o tym, że tablice przechowują nie tylko liczby, ale również teksty. 2. Podprogramy Dowiesz się, co to są podprogramy i do czego można je wykorzystać. 3. Elementy grafiki Nauczysz się pisać proste programy graficzne w Delphi i C++ Builder. 4. Przechowywanie informacji w rekordach i w strukturach Poznasz informacje o rekordach i strukturach oraz dowiesz się, w jaki sposób te informacje są przechowywane w języku Delphi i C++ Builder. 5. Elementy programowania obiektowego Poznasz między innymi elementy programowania obiektowego. Nauczysz się pisać proste programy zawierające obiekty. 5. Operacje wejścia/wyjścia Dowiesz się, co to są pliki oraz jak zapisywać informacje do pliku i jak je odczytywać. Pełną wersję książki zamówisz na stronie wydawnictwa Złote Myśli http://www.zlotemysli.pl/prod/6312/programuje-w-delph i-i-c-builder-cz-2-miroslaw-j-kubiak.html