Висновок графіків функцій в delphi - все про it і програмуванні
По-перше висновок на екран - це висновок на дискретний носій. Цей факт майже ніяк не враховується. У тексті буде пояснено.
Програма добре виводить графіки, коли функція має як позитивні, так і негативні значення. Причому весь графік поміщається в зазначеному прямокутнику.
Тепер подивимося, а скільки обчислень значень функції робить програма? В даному випадку (25-0) /0.01=2500. Для будь-якого прямокутника виведення. Чим був зумовлений вибір кроку dx? Швидше за все, безперервністю лінії графіка. Який, до речі, так і залишився переривчастим на деяких ділянках, там, де функція змінюється швидко. Борються з цим, зменшуючи dx, причому частіше радикально - відразу в 10, і навіть в 100 разів, доводячи до 0.0001; менше мені не доводилося зустрічати. А це 250000 обчислень функції. І графіки все одно переривчасті. Благо комп'ютери швидкі. Але от якщо обчислювати функцію, задану неявно, то графік буде будується повільніше. Виберемо прямокутник виведення 600 * 400. Таким чином по горизонталі ми можемо мати тільки 600 значень. По осі У, відповідно, теж. Питання: куди йдуть інші 249400 результату обчислень? Частина йде на побудову вертикальних відрізків прямих, що з'єднують сусідні ординати, а левову частку інших поїдає Round. Ось тобі і дискретний висновок. Звідси випливає, що функцію потрібно вважати в 600 точках, а відрізки вертикальних прямих можна намалювати олівцем. І dx потрібно вибирати в нашому випадку (25-0) / 600 = 0,0416666. Графік вийде найякісніший, який тільки можливо отримати. Потім, немає необхідності обчислювати її значення двічі .Можно раз, запам'ятавши результат в масиві (Масив має розмір не більше дозволу монітора). В таких умовах швидкість виведення не змінюється.
По-друге, сам метод побудови (обчислення значень функції з кроком dx) працює як фільтр, відсікаючи високочастотні гармоніки, тобто я хочу сказати, що якщо до функції f (x) додати щось на зразок g (x) * sin ( 2 * pi / dx * x), то результат виведення буде плачевним. Цей елемент ніяк не змінить попередній графік. Хоча він може бути основним носієм інформації про функції. І вже звичайно дуже непросто вивести на екран графік дискретної функції (мається на увазі універсальними програмами загального користування, подібними наведеної). Якщо взяти f (x) = 2 * Sin (x) * exp (x / 5) + exp (x * x) * sin (2 * pi / dx * x), то дана програма другий доданок не помітить, хоча буде витрачати час на розрахунок f (x) = 2 * Sin (x) * exp (x / 5) * exp (x * x) * sin (2 * pi / dx * x). А в цьому випадку графік константи. Наведена програма, як я згадував, некоректно відобразить і його, але це ж навчальна програма. Тому претензій не пред'являємо.
А ось якщо взяти TAB MathGrapher 1.0 (поширена в Інтернеті) і просто ввести 5 * Sin (200 * pi * x), то ми отримаємо чистий нуль. Замість 5, зрозуміло, можна написати будь-яку функцію, та й замість Sin (200 * pi * x) будь-яку періодичну з кратною частотою, і програма видасть невірний графік.
Збірка проектаДля компіляції прикладу потрібно середовище розробки Delphi 6 або 7.Файл проекту - TestVK.dpr.Откройте цей файл (наприклад, подвійним клацанням миші з Провідника). Натисніть клавіші Ctrl-F9 (або пункт меню Project-Compile). Якщо все пройшло нормально, в цій же папці утворюється готовий.
1. Вибираємо з бази даних тільки ті поля, які нам нужниЗапроси виду: select * from. можуть дуже сильно навантажити як сервер, так і комп'ютер користувача, особливо якщо таблиці містять великі символьні або виконавчі поля. Наприклад, навіщо вибирати поле з фотографією співробітників, коли потрібні.
Нерідко зустрічав на форумах думки, що потоки не потрібні взагалі, будь-яку програму можна написати так, що вона буде чудово працювати і без них. Звичайно, якщо не робити нічого серйозніше "Hello World" це так і є, але якщо поступово набирати досвід, рано чи пізно будь-який початківець програм.
Напевно кожен з нас хоча б раз у своїй практиці, але зустрічався з кодом виду: TForm1 = class (TForm) private procedure MyCoolHandler (var Message: TMessage); message WM_USER; public end; procedure TForm1.MyCoolHandler (var Message: TMessage); begin Message.Result: = 32767 ;.
Технологія, яка буде описуватися в цій статті це технологія IMAPI v2.0. Однією статтею цю технологію описати неможливо, тому в цій статті будуть описані лише основи роботи з IMAPI2. Ця технологія досить-таки нова, і підтримується операційними системами Windows XP.