вторник, 25 декабря 2012 г.

задачі

 вивід букв англійського алфавіту
 
var c: char;
 
begin
  for c := 'a' to 'z' do
    write(c,' ');
  writeln;  
  c := 'A';
  while c<='Z' do
  begin
    write(c,' ');
    c := succ(c);
  end;
end.
 
вивід послідовностей 1 2 3 4 5 і 5 4 3 2 1
 
 var i: integer;
begin
//  for
  for i := 1 to 5 do
    write(i,' ');
  writeln;
 
  for i := 5 downto 1 do
    write(i,' ');
  writeln;
  writeln;
 
// while
  i := 1;
  while i<=5 do
  begin
    write(i,' ');
    i := i + 1;
  end;
  writeln;
 
  i := 5;
  while i>=1 do
  begin
    write(i,' ');
    i := i - 1;
  end;
  writeln;
  writeln;

вторник, 11 декабря 2012 г.

Таблиця множення на Паскалі

Досить часто потрібно побудувати на екрані якусь двовимірну таблицю. Це можна реалізувати за допомогою двох циклів для. При цьому один цикл повинен бути вкладений в інший.

Припустимо, нам потрібно вивести на екран таблицю множення.
Алгоритм рішення задачі:

Зовнішній цикл для відповідає за формування рядків. Всього їх буде 10, отже кількість ітерацій циклу повинне бути дорівнює 10.

Внутрішній цикл для формує кожне значення в рядку. Всього значень у рядку 10. Значить і число його ітерацій повинно бути 10.

У тілі вкладеного циклу для відбувається формування конкретного значення шляхом множення поточного значення лічильника зовнішнього циклу на поточне значення лічильника внутрішнього циклу. Оскільки протягом десяти ітерацій внутрішнього циклу, значення лічильника зовнішнього циклу не міняється, то виходить рядок, де числа від 1 до 10 множаться на одне і те ж число.

Після виходу з внутрішнього циклу, перед наступною ітерацією зовнішнього циклу потрібно здійснити перехід на новий рядок. Інакше всі значення будуть записані не у вигляді таблиці, а у вигляді одного рядка.


var
  x,y:0..10;
  s:integer;
begin
  for x:= 0 to 10 do
    for y:= 0 to 10 do
      begin
        s:=(x+1)*(y+1);
        write(s:5);
      end;
   writeln;
end.
 
в такому вигляді таблиця виходить до 11, і останній WriteLn не належить першому циклу, від того і не переносить рядок, після завершення другого. 


 Визначення чверті на координатній площині

 Всім відома прямокутна (декартова) система координат, в якій дві перпендикулярні осі ділять площину на чверті. У першу чверть потрапляють точки, у яких обидві координати (X і Y) більше нуля. У другу: х <0 span="span">, у> 0; третю: х <0, у <0 span="span">; четверту: х> 0, у <0 span="span">.

Допустимо, потрібно написати програму, що визначає по координатам точки, в якій чверті вона знаходиться.
Алгоритм рішення задачі:

Для вирішення цього завдання доречно використовувати умовні оператори, якщо-інакше вкладені одна в одну.



var
    x,y: real;
 
begin
    write ('x = '); read (x);
    write ('y = '); readln (y);
 
    write ('Номер четверті координатної  площини: ');
    if (x > 0) and (y > 0) then
        writeln ('I')
    else
        if (x < 0) and (y > 0) then
            writeln ('II')
        else
            if (x < 0) and (y < 0) then
                writeln ('III')
            else
                if (x > 0) and (y < 0) then
                    writeln ('IV')
                else
                    writeln ('-. Точка лежить на осі.');
 
readln
end.

вторник, 4 декабря 2012 г.

Практичне заняття

Визначити яке з трьох, введених користувачем, чисел максимальне і вивести його на екран.

У програмі буде три змінні для чисел, що вводяться користувачем: N1, N2, N3. Також для спрощення алгоритму введемо четверту змінну, в яку по ходу виконання коду буде поміщено максимальне значення: макс.

 
Алгоритм

     Порівняти перше і друге число (N1 і N2). Змінної макс присвоїти значення змінної, що містить більше значення.
     Порівняти значення змінної макс з третім числом, введеним користувачем (n3). Якщо значення n3 виявиться більше, ніж максимальна, то привласнити максимальне значення третього числа. Якщо ж значення максимальної виявиться більше, то нічого не робити.


var
    a1, a2, a3, max: integer;
 
begin
    write ('Введіть три числа: ');
    readln (a1, a2, a3);
 
    if a1 >= a2 then
        max := a1
    else
        max := a2;
 
    if a3 > max then
        max := a3;
 
    writeln ('Максимальне з них: ', max);
 
readln
end.


Як можна переписати цю програму, щоб позбутися від мітки.


label lab;
var month;
begin
    lab:
    write('Введіть номер місяця: ');
    readln(month);
    if not (month in [1..12]) then
        goto lab;
 
 
 Рішення
 
 while not (month in [1..12]) do begin
    write('Номер місяця : ');
    readln(month);
end;
 

среда, 28 ноября 2012 г.

задачі

Знайти кількість цифр у цілому числі.


Program c0;
Uses crt;
Var n,k:integer;
Begin
ClrScr;
Writeln('введіть число');
readln (n);
k:=0;
while n>0 do
begin
n:=n div 10;
k:=k+1;
end;
writeln('кількість цифр =',k);
readln;
end.

Ввести дріб а / б. Визначити,  Чи дріб є скоротний. (Дріб є нескоротним, якщо НСД (A, B) = 1.



Program cikl_15;
uses crt;
var m,n : longint;
begin
clrscr;
write('чисельник ');readln(m);
write('знаменник ');readln(n);
while m<>n do
if m>n
then m:=m-n
else n:=n-m;
n:=m;
if n=1
then write('скорочений')
else write('нескорочений');
readln;
end.

вторник, 27 ноября 2012 г.

Задачі

Вгадати число
 
var
    a,b: integer;

begin
    randomize;
    a := random(100);

    while a <> b do begin
        write('Введіть число: ');
        readln(b);
        if b > a then
            writeln('Багато')
        else
            if b < a then
                writeln('Мало')
            else
                writeln('Вгадал');
    end;

readln
end.

Написати програму, яка виводить квадрати цілих чисел на проміжку від  A до B.

var a,b:integer;k:real;
begin
writeln('a,b');
readln(a,b)
while a<>b
 begin
 k:=sqr(a);
writeln(k);
a:=a+1;

end;
 end.

 

понедельник, 22 октября 2012 г.

TFrame - компонент

Опис
Фрейм являє собою щось середнє між панеллю і формою. З формою його ріднить те, що він:
· Проектується окремо, як самостійний вікно· Має свій модуль -. Файл *.pas· Має можливість спадкування, причому навіть більш широкі, ніж у форми, так як може успадковуватися навіть всередині однієї програми· Може включатися в Депозитарій і використовуватися так само, як і форма, включаючи успадкування
З панеллю фрейм ріднить те, що він:
· Не є самостійним вікном Windows, і може відображатися тільки на формі або іншому контейнері· Має властивості, методи, події, подібні панелі, а не формі
Таким чином, фрейм - це панель, тобто якийсь фрагмент вікна додатку, але здатний переноситися на різні форми, в різні додатки і допускає використання переваг спадкування.
Почати проектування нового фрейму можна командою File | New frame або командою File | New і вибором піктограми кадрів на сторінці Нові вікна Депозитарію. В обох випадках перед вами відкриється вікно фрейма, подібне вікна форми, в який ви можете переносити будь-які компоненти, як на форму.
Розміщення спроектованого фрейму на формі проводиться вибором в палітрі компонентів на сторінці Stanlard піктограми Frame. З'явиться діалогове вікно, в якому буде питати, якою фрейм ви хочете розмістити на формі. Вибрати ваш фрейм і він з'явиться на формі.
Будь-які зміни, які ви робите у фреймі, відобразяться у всіх примірниках фрейма, розміщених на формі, якщо тільки ви не змінили в них якісь властивості вручну.


четверг, 18 октября 2012 г.

Архівація файлів


Значна частина інформаційних ресурсів суспільства зберігається на магнітних носіях. Але інформація на магнітних носіях може бути часткового або повністю втраченою в силу наступних причин:
1)фізичне псування носія в наслідок дії зовнішніх магнітних колів, старіння чи зношення магнітного покриття;
2)діяльність комп’ютених вірусів
3)необачне знищення і т.д.
З метою забезпеченна надійного збереження інформації створюють резервні копії даних. Процес створення резервних копій назив. архівацією. Основний зміст архівації полягає у створенні таких резервних копій, які б займали би значно менше дискової пам’яті, ніж інформація у вихідному стані. Таким чином, сьогодні під архівацією слід розуміти процес перекодування деякої сукупності файлів з метою зменшення загального об’єму пам’яті, який вони займають. Архівацією ще називають процес стискування даних. Розроблено багать різних амореймів архівації. Усі вони ґрунтуються на базі різних підходів та методі, але в сонові більшості з них лежить принцип заміни рівномірного двійкового коду на нерівномірний (кодоскоп).
Кодування слова “абракадабра”.
Для архівації файлі використовують спеціальні програми, які називають архіваторами. Стиснуті файли поміщають у файл, який називають архівом.
Текстові, графічні та інші файли даних можуть бути стиснені у 3-10 разів і знаесені до файлу-архіву спеціальними програмами-архіваторами,
Перші архіватори з’явилися у 1985 році. Основними можливостями сучасних архіваторів є: занесення цілих груп файлів та підкаталогів в архів, поновлення архіву перегляд файлів в архіві, вилучення файлів з архіву, захист файлів від несанкціонованого доступу, перевірка цілісності архіву, створення багатотомних архівів, та архівів, які автоматично розкриваються. Сучасні архіватори дозволяють економити від 20 до 90% дискового простору.
Файлом, який міститься в архіві, можна скористатися лише після того, як він буде відновлений у початковому вигляді, тобто розархівований.
Розархівацію виконують або ті ж самі архіватори, або окремі програми, які називають розрахіваторами.
Найбільш відомими архіваторами (розархіваторами) є: RLZIP.EXE, RKUNZIP.EXE, ARI.EXE, LHARC.EXE.
При виборі конкретного тону архіватора (розархіватора) керуються г-ма критеріями: швидкістю його роботи та коефіцієнти стискування даних. При цьому для одних типів файлів кращим може бути один архіватор, а для інших – інший.

вторник, 9 октября 2012 г.

компонет TIMAGE

компонет TIMAGE - Відображає графічне зображення і забезпечує роботу з ним

модуль extctrls

опис

Компонент TImage відображає на формі графічне зображення. Властивість Picture типу TPicture містить відображуваний графічний об'єкт типу бітової матриці, піктограми, метафайлу або певного користувачем типу. Властивість Canvas дозволяє створювати і редагувати зображення.
Щоб створити на формі або модулі даних зображення, яким керують інші елементи, треба використовувати не TImage, а TImageList.


 Canvas -Поверхня (полотно, канва) для малювання в багатьох компонентах. Властивість Canvas типу TCanvas використовується для малювання пером Pen і пензлем Brush, для модифікації зображення, накладення один на одного декількох зображень.

Основнні методи TCanvas 

procedure Rectangle(X1, Y1, X2, Y2: Integer);  -прямокутник

procedure Ellipse(X1, Y1, X2, Y2: Integer); -малює еліпс

 procedure TextOut(X, Y: Integer; const Text: string); функція TextOut пише рядок тексту Text на канві, починаючи з позиції з координатами (X, Y).

procedure LineTo(X, Y: Integer); -Метод LineTo малює на канві пряму лінію, що починається з поточної позиції пера PenPos і кінчається крапкою (X, Y), виключаючи саму точку (X, Y). Поточна позиція пера PenPos переміщається в точку (X, Y). При малюванні використовуються поточні установки пера Pen.
 
procedure MoveTo(X, Y: Integer); Метод MoveTo змінює поточну позицію пера PenPos на задану точкою (X, Y). Це еквівалентно безпосередній установці властивості PenPos. При переміщенні пера методом MoveTo нічого не малюється.

 procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer); Малює на канві прямокутну рамку з округленими кутами. Метод RoundRect малює на канві прямокутну рамку з округленими кутами, використовуючи поточні установки пера Pen і заповнюючи площа фігури поточної пензлем Brush. Рамка визначається прямокутником з координатами кутів (X1, Y1) і (
X2, Y2). Кути скругляются за допомогою еліпсів з шириною X3 і висотою Y3.
Якщо задати ширину еліпса X3 X2 - X1, то верхня і нижня межі рамки виявляться цілком округленими (без прямолінійною частини). Якщо Y3 Y2 - Y1, те ж саме відбудеться з лівого і правого кордонами рамки. Якщо ж обидва виміри еліпса не менше розмірів рамки, то буде малюватися просто еліпс. Але, звичайно, для малювання еліпса краще використовувати метод Ellipse. Якщо один з розмірів еліпса задати нульовим, то буде малюватися прямокутна рамка. Але, звичайно, для такої рамки краще використовувати метод Rectangle.



Приклади


 image1.Canvas.Brush.color := clRed;
 
image1.Canvas.Brush.Style := bsDiagCross;
  
image1.Canvas.Ellipse(0, 0, Image1.Width, Image1.Height);



понедельник, 8 октября 2012 г.

winexec, ShellExecute

function WinExec(CmdLine: PChar; CmdShow: integеr)  : integer;

Запускає вказаний додаток
опис
Функція WinExec дозволяє виконати вказаний додаток. Параметр CmdLine є покажчиком на рядок з нульовим символом в кінці, що містить ім'я виконуваного файлу і, якщо необхідно, параметри командного рядка.
Якщо ім'я зазначено без шляху, то Windows, шукає виконуваний файл в наступній послідовності:


1. Каталог, з якого завантажено додаток.
2. Поточний каталог.
3. Системний каталог Windows, що повертається функцією GetSystemDirectory.
4. Каталог Windows, що повертається функцією GetWindowsDirectory.
5. Список каталогів із змінної оточення PATH.


 Параметр CmdShow визначає форму подання вікна запускається додатку Windows. Можливі значення цього параметра див в розділі ShellExecute. Для додатків не Windows, для файлів PIF і т.д. стан вікна визначає сам додаток.
При успішному виконанні запуску додатка функція WinExec повертає значення, більше 31. При невдачі можуть повертатися наступні значення (іменовані константи використовуються тільки Win32, а для Delphi 1 можна використовувати лише номери, причому їх більше, ніж наведено в таблиці - див розділ ShellExecute.):
Значення Номер Опис0 0 Не вистачає пам'яті або ресурсів системи.ERROR_BAD_FORMAT 11 Помилковий файл. EXE (наприклад, не для Win32. EXE).ERROR_FILE_NOT_FOUND 2 Вказаний файл не знайдений.ERROR_PATH_NOT_FOUND 3 Вказаний каталог не знайдений.
 
Перевагою функції WinExec є її сумісність з ранніми версіями Windows. Власне для цього вона і зберігається в WIN32, хоча для Win32 рекомендується користуватися функцією CreateProcess (про цю функцію див Вбудовану в Delphi довідку).При роботі з Win32 функція WinExec завершує роботу, якщо спричинене додаток викликає функцію GetMessage або закінчується виділений ліміт часу. Таким чином, очікування можна перервати, передбачивши в процесі, запущеному з допомогою WinExec, в потрібний момент виклик функції GetMessage.

  приклад

 WinExec('calc',SW_RESTORE);

 
 

ShellExecute

 ShellExecute - функція API Windows

 Модуль ShellAPI

 function ShellExecute(Wnd: HWnd;           Operation, FileName, Parameters, Directory: PChar;
          ShowCmd: Integer): THandle;

 опис

Функція ShellExecute дозволяє виконати будь-який додаток Windows. Можна також відкрити файл документа, що означає виконання пов'язаного з ним програми та завантаження в нього цього документа. Наприклад, зазвичай з документами, що мають розширення. DOC, пов'язаний Winword. У цьому випадку відкрити файл, наприклад, з ім'ям 'file.doc "означає запустити Winword і передати йому як параметр ім'я файлу' file.doc. Крім описаних можливостей функція ShellExecute дозволяє роздрукувати вказаний файл або відкрити вказану папку. Останнє означає, що буде запущена програма "Провідник" з відкритою зазначеної папкою.

Параметри функції означають наступне
:


 Wnd Батьківське вікно, в якому відображаються повідомлення запускається додатка.
Операція Вказує на рядок з нульовим символом в кінці, яка визначає виконувану операцію. Цей рядок може містити текст "відкритого" ​​(відкрити) або "друк" (надрукувати). Для Windows 95 і NT визначено ще одне значення: «вивчити» (досліджувати) - відкрити папку. Якщо параметр дорівнює нулю операції, то за умовчанням виконується операція "відкритим".
Ім'я_файлу Вказує на рядок з нульовим символом в кінці, яка визначає ім'я файлу.
Параметри Вказує на рядок з нульовим символом в кінці, яка визначає передаються в додаток параметри, якщо FileName визначає виконуваний файл. Якщо FileName вказує на рядок, визначальну відкривається документ, то цей параметр задається рівним нулю.
Каталог Вказує на рядок з нульовим символом в кінці, яка визначає каталог за замовчуванням.
ShowCmd Визначає, режим відкриття зазначеного файлу.


приклади

ShellExecute(Handle,'explore', 'c:\Program Files\Borland',  nil,nil,SW_RESTORE);
 ShellExecute(Handle,'open','Calc',nil,nil,SW_RESTORE);

 

вторник, 2 октября 2012 г.

Компонент MEMO

Компонент Delphi Memo це простий текстовий редактор. Delphi Memo дозволяє вводити багаторядковий текст з клавіатури, завантажувати його з файлу, редагувати і зберігати в файл текстового формату. При вивченні роботи з Delphi Edit раджу відвідати сторіночку робота з рядками Delphi, так як там описуються функції Delphi для роботи з даними, представленими в текстовій формі, з якими і оперує компонент Memo.

    Простота текстового редактора компонента Delphi Memo полягає в тому, що текстовий редактор Delphi Memo не володіє можливостями форматування содержещегося в ньому тексту. Це означає, що всі атрибути вибраного шрифту будуть ставитися до всього тексту.

    Текст в компоненті Memo Delphi розміщується порядково. Тому є доступ до кожного рядка тексту окремо. Рядка в редакторі Delphi Memo є об'єктами Lines [я] типу String, де я - номер рядка, відлічуваний від нуля. Об'єкт Lines [я] доступний і для читання, і для запису. Відповідно, текст в компоненті Memo можна редагувати не тільки з клавіатури, але і програмно:



 var S: String;
begin
 Memo1.Lines[3]:='Четвёртая строка по счёту';
 S:=Memo1.Lines[3];
end;


 Природно, для успішного присвоєння тексту певної рядку необхідно, щоб цей рядок фізично існувала! Тобто, даним способом можна тільки редагувати текст. Новий рядок створити таким способом неможливо. Для створення нових рядків служать методи


  • Add()
  • Insert()
 Метод Add () додає новий рядок в кінець, а метод Insert () впроваджує новий рядок перед зазначеної, для чого метод Insert () має відповідний параметр:

 begin
 Memo1.Lines.Add('Это будет последняя строка');
 Memo1.Lines.Insert(2, 'Эта строка будет третьей');  //Так как отсчёт идёт от нуля!
end;


 Delphi Memo має також метод для видалення рядки:

 Memo1.Lines.Delete(i); // Видалення рядка з індексом

 Компонент Delphi Memo дозволяє отримати доступ до тексту як цілого. Властивість Текст струнного типу є текстом, що міститься в редакторі, у вигляді одного рядка. Необхідно враховувати, що цей рядок також буде включати в себе і недруковані символи кінця рядка № 13 та символи переносу рядка № 10. До речі, щоб продовжити текст з нового рядка, необхідно використовувати послідовно обидва цих символу:

 Memo1.Text: = 'Попередній текст' + # 13 + # 10 + 'Це вже новий рядок';


воскресенье, 6 мая 2012 г.

Підпрограми - процедури


У мові Паскаль розрізняють два види підпрограм: Підпрограми-процедури і підпрограми-функції.
Концепція структурного програмування поллягає в тому, що будь-яку складну чи громіздку задачу потрібно звести до послідовності простіших підзадач, записати підпрограми для їхнього розв’язування і створити головну програму, яка має складатися з викликів  цих процедур. Різновидом підпрограми  є процедура, де розв’язується допоміжна задача.
Procedure <Назва процедури>;
<Розділи описів і оголошень процедури>
{Оголошенні тут змінні називаються локальними}
begin
<Розділ команд процедур>
end;
Назву процедурі дає користувач. Процедур може бути декілька. Їх записують у розділі описів головної програми:

Program <Назва головної програми>;
<Розділ описів і оголошень>;
{Оголошені тут змінні називаються глобальними }
<Процедура 1>;
<Процедура 2>;
.............
begin
< Розділ команд, який містить
виклик процедури 1;
виклик процедури 2;>
.....
end.
Розділ команд головної програми складається в основному з викликів процедур. Виклик процедури – це команда, яка збігається з назвою процедури.
2) Демонстраційний приклад.

Дано сторони a, b прямокутника. Обчислити його  периметр і площу, використавши для цього процедуру.

Program M1;
var a, b,  p, s :real;
procedure Rect;
begin
p:=2*(a+b);
s:=a*b
end;
begin
write(‘Ведіть a і b’);
readln(a,b);
Rect;
writeln(p:6:2, s:6:2);
end.

3) Розв’язування задач.
Розв’язати самостійно задачі, використвши при  цьому підпрограми-процедури.
а) Обчислити кількість теплоти, яка необхідна для нагрівання води від температури 28 до 100 С.
б) Перевірити чи трикутник зі сторонами a, b, c є рівнобедреним?