Програмування в Delphi в консоли
Зміст
Зміст 1
Вступ 3
ТЕОРЕТИЧНА ЧАСТИНА. 4
1. Програмування в Delphi. 4
2. Основні елементи програми 4
3. Основна частина програми 5
4. Модулі 7
5. Проект 10
6. Turbo Pascal та Borland Pascal 10
7. Алфавіт мови 11
8. Типи даних. 12
9. Особливості архітектури програми в ос windows 14
ПРАКТИЧНА ЧАСТИНА 16
Завдання 1 16
Блок-схема 16
Код програми 17
Скріншоти програми 18
Завдання 2 18
Блок-схема 19
Код програми 19
Скріншоти програми 20
Завдання 3 21
Блок-схема 22
Код програми 22
Скріншот програми 24
Завдання 4 24
Блок-схема 25
Код програми 25
Скріншот програми 27
Завдання 5 27
Блок-схема 28
Код програми 28
Скріншоти програми 30
Завдання 6 30
Блок-схема 31
Код програми 31
Скріншоти програми 33
Завдання 7 33
Блок-схема 34
Код програми 34
Скріншоти програми 37
Висновок 38
Література 39
Вступ
У даній курсовій роботі виконано 7 завдань на застосування різних функцій, операторів і конструкцій мови Pascal.
Розробка програми повинна вестись за допомогою мови програмування Turbo Pascal в середовищі Delphi – для операційної системи Windows 9x-XP.
Всі завдання виконані в середовищі програмування Delphi 7. Кожне завдання виконане в консольному проекті, кожний з яких утримується в окремій папці.
ТЕОРЕТИЧНА ЧАСТИНА.
Програмування в Delphi.
Delphi - це об’ектно-орієнтоване
середовище для візуальної
Програмування в Delphi складається з двох основних етапів:
- Візуальна побудова програми на основі об’єктних компонентів і настроювання їх властивостей, в результаті чого можна швидко сформувати користувальницький інтерфейс і забезпечити значну частину функціональності додатка.
- Написання програмного коду мовою Object Pascal для забезпечення особливої функціональності додатка, яку неможливо досягти використанням візуальної побудови.
З моменту
першої реалізації мови Pascal технології
програмування зробили
Розглянемо основні елементи мови програмування Pascal, звертаючи увагу на зміни, що відбулися з ним в Delphi.
Основні елементи програми
Основними елементами програми мовою Object Pascal є:
- оператори - команди, що визначають структуру програми (наприклад, оператори розгалуження і зациклення) або виконуючі які-небудь дії (наприклад, арифметичні операції чи операції порівняння):
- ключові слова - команди, використовувані звичайно для відокремлення одних частин програми від інших. Ключові слова призначаються для компілятора, губляться в процесі побудови програми, що виконується і не виконуються в буквальному значенні цього слова;
- директиви компілятору - аналогічні ключовим словам, але впливають не на програму і її структуру, а на процес компіляції і побудови програми. Частину директив компілятору можна установити за допомогою головного меню інтегрованого середовища, однак використання директив у тексті програми допомагає використовувати їх вибірково - не для всієї програми, а для окремих її частин.
Основна частина програми
Програма на Object Pascal, як і в більш ранніх версіях Pascal, складається з основної частини, власне і названою програмою (англ. Program - Програма) і декількох модулів (англ. Unit - Модуль), що підключаються на етапі компіляції до основної частини програми, наявність яких не обов'язкова. Розглянемо структуру основної частини програми.
Program
.......... Заголовок програми
Uses
........... Розділ
підключення модулів (
Label
··········· Розділ опису міток безумовного переходу Const
........... Розділ опису констант
Type
........... Розділ опису нестандартних типів даних
Var
........... Розділ опису змінних
……....Початок розділу опису логіки програми
Begin
........... Розділ опису логіки програми
End. Кінець розділу опису логіки програми
Основна частина програми міститься в окремому файлі і складається з одного чи декількох розділів, кожний з який починається з визначеного ключового слова (Program, Uses, Label і т.д.). Якщо в існуванні розділу немає необхідності, то ключове слово, що його відкриває, не вказується. Основна частина програми в Delphi має розширення dpr (від aнгл. DPr - Delphi Project - Проект Delphi) і, у більшості випадків, не вимагає втручання програміста. Створення і відновлення основної частини програми бере на себе середовище розробки.
З усіх представлених
розділів обов'язковим в Pascal є тільки
розділ опису логіки програми (починається
ключовим словом Begin, закінчується ключовим
словом End із крапкою). У програмі на
Delphi обов'язковим є також
Program <Назва>;
Вимога до
наявності заголовка програми зв'язана
з посиланнями на файли ресурсів,
що підключаються до програми, і
назви, що мають такі ж, що і файл,
у якому зберігається основна
частина програми. Дані посилання
додаються середовищем
Назва програми вибирається за звичайними правилами іменування ідентифікаторів у Turbo Pascal. Ехе- файл, одержаний в результаті компіляції програми, має ім'я, що відповідає назві файлу з програмою.
Розділи опису констант (починається ключовим словом Const), нестандартних типів даних (ключове слово Туре) і змінних (ключове слово Var) можуть знаходитись один за одним у будь-якому порядку, однак приведений порядок є найбільш прийнятним. Це пов'язано з тим, що константи можуть використовуватися при описі типів даних і змінних, а типи даних звичайно використовуються при описі змінних. При цьому ідентифікатори, описані в розділі опису змінних, ні при яких умовах не можуть використовуватися в розділах опису типів і констант. Область дії ідентифікатора починається з моменту його опису, тобто використання ідентифікатора можливо тільки нижче по тексту програми.
Модулі
Модуль (бібліотека), так само як і основна частина програми, міститься в окремому файлі і складається з декількох розділів, аналогічних розділам основної частини програми. Розглянемо структуру модуля.
Unit Заголовок модуля
interface Вказівка на початок интерфейсной секції
Uses
.......... Розділ
підключення модулів (
Const
.......... Розділ опису констант
Type
........ Розділ опису типів даних
Var
......... Розділ опису перемінних
Implementation Вказівка на початок описової секції Uses
........... Розділ підключення модулів
Label
........... Розділ
опису міток безумовного
Const
........... Розділ опису констант
Турі
........... Розділ опису типів даних
Var
........... Розділ опису змінних
initialization Початок секції ініціалізації
......... . Розділ опису логіки ініціалізації
finalization Початок секції деініціалізації
........... Розділ опису логіки деініціалізації
End. Закінчення модуля
Вихідний текст модуля може містити чотири секції:
- Інтерфейсна секція (починається ключовим словом interface), в якій розташовуються заголовки процедур і функції, а також опису констант (розділ опису констант починається з ключевого слова Const), нестандартних типів даних (ключове слово Туре) і змінних (ключове слово Var). Всі ідентифікатори, описані в интерфейсной секції, доступні для використання підключаючим (модуль) частинам програми, поряд з їхніми власними описами.
- Описова секція (починається ключовим словом Implementation), в якій розташовуються описи процедур і функції, заголовки яких зазначені в інтерфейсній секції, а також інші процедури і функції, використовувані підпрограмами даного модуля, але недоступні фрагментам програм, що підключають модуль. Також в описовій частині модуля можуть розташовуватися описи міток безумовного переходу, констант, нестандартних типів даних і змінних (починаються, відповідно, із ключових слів Label, Const, Туре і Var). Усі ці описи також не доступні фрагментам програми, що подключили модуль, і використовуються тільки для внутрішніх цілей бібліотеки.
- Секція ініціалізації (починається ключовим словом initialization), що містить команди, які необхідно виконати при підключенні модуля до програми. Таким чином, перед виконанням якої-небудь програми, до якої підключаються зовнішні модулі, спочатку виконуються ініціалізовані частини модулів (у порядку підключення). Дана секція не є обов'язкової.
- Секція деініціалізації, використовується тільки при наявності секції ініціалізації, що містять команди, які необхідно виконати при завершенні додатка. Дана секція не є обов'язкової і може використовуватися для звільнення ресурсів, зайнятих у секції ініціалізації.
Наявність ключового слова End із крапкою є обов'язковим і означає закінчення модуля.
Наявність інтерфейсної і описової секцій у бібліотеці є обов'язковим, навіть, якщо в цих секціях нічого не міститься. Таким чином, ключові слова Interface і Implementation повинні бути присутніми в тексті модуля завжди.
Назва модуля - ідентифікатор, що вказується після ключового слова Unit у заголовку модуля. Назва модуля будується за звичайними правилами іменування ідентифікаторів і повинна відповідати імені файлу, в якому знаходиться опис модуля. Саме за назвою здійснюється підключення модулів до основної частини чи програми до інших модулів. Як уже згадувалося раніше, підключення виконується в розділі підключення модулів Uses за назвою.
Розглянемо приклад найпростішого модуля і програми, що підключає до себе цей модуль. Код модуля приведений в лістінгу 5.1, а код програми, що його підключає - в лістінгу 5.2.
Лістінг 5.1. Найпростіший модуль
Unit Unitl; {Заголовок модуля, назва модуля - Unit1}
Interface {Вказівка
на початок інтерфейсної
Implementation {Вказівка на початок описової секції}
End. {Закінчення модуля)
Лістінг 5.2. Найпростіша програма, що підключає модуль
Program Program1; {Заголовок програми,
назва програми - Program1} Uses {Розділ підключення модулів}
Unitl; {Підключення модуля Unitl}
Begin (Початок розділу опису логіки програми}
End. (Кінець розділу опису логіки програми)
Проект
Важливим нововведенням в Delphi є поняття проекту - опису частин, на які розбитий вихідний текст програмного продукту. Крім файлів з вихідними текстами, у проект можуть входити файли ресурсів, що підключаються до програми (наприклад, зображення чи тексти).
Проект призначений для підвищення зручності розробки програмних продуктів, особливо великих, тому що середовище розроблювача має можливість контролювати елементи проекту, наприклад, для підтримки актуальності відкомпільованих частин програми.
Опис проекту знаходиться в основній частині програми, генерується середовищем автоматично, і в більшості випадків, не вимагає втручання програміста. Основна частина програми знаходиться у файлі з розширенням dpr і містить перерахування всіх модулів, що входять в npoekт, а також ініціалізовану частину програми і деяку допоміжну інформацію для більш тонкого настроювання середовища під конкретний проект.
Turbo Pascal та Borland Pascal
Turbo, а пізніше Borland Pascal—
це одна з найвдаліших та
найпоширеніших реалізацій мови
Pascal, створена компанією Borland. Turbo
Pascal — розширення американського
стандарту (ANSI Pascal), яке враховує
архітектурні особливості MS-
Компілятор Turbo Pascal працює за однопрохідною схемою, реалізує функції редагування зв'язків, формуючи на виході готовий до виконання об'єктний код. Компілятор може здійснювати широкий набір локальних оптимізацій (згортання констант, виключення невикористовуваного коду і зайвих даних, оптимізація операцій і т.д.), що сприяє високій ефективності кінцевих програм.
Система Turbo Pascal є інтегрованим середовищем (IDE), яке налічує ряд компонентів, що в сукупності підтримують усі види робіт зі створення програм. Система містить універсальний текстовий редактор, компілятор вхідної мови, редактор зв'язків і вбудований символьний зневаджувач. Багатовіконний інтерфейс із розвинутою системою меню і досконалою довідковою системою забезпечує високу продуктивність праці програміста.
Borland Pascal 7.0, 7.01 компілює програми
для DOS та ОС Windows 1.0, Windows 2.0, Windows 3.x,
а також містить ряд
Початкові версії компілятора мають інший вигляд. Далі будуть розлянуті версії корпорації Borland: Turbo Pascal 7.0 та Borland Pascal 7.0/7.01, які вже давно стали класичними. Текст компілюється в машинну мову для центральних процесорів 8086/8088, 80186/80188, 80286, 80386(BP 7.0/7.01) та сумісних з ними. Компіляція коду для роботи з числами з плаваючою точкою може здійнюватися, як в прямі машинні інструкції співпроцесорів 8087, 80187 (80c187), 80287 (80c287, 80287xl/xlt) та сумісних з ними, так і шляхом емуляції.
Алфавіт мови
Імена у мові Pascal формуються
з латинських літер A-Z, a-z, цифр
0-9 та знака "підкреслення" ("_").
Також використовуються
Зарезервоване слово –
це ідентифікатор, якому в мові програмування
наданий певний смисл. Це може бути
ім'я операції, оператор, службове слово,
тощо. Забороняється правилами мови
ПАСКАЛь перевизначати
Для мови ТУРБО ПАСКАЛЬ
байдужний регістр клавіатури, тому
можна використовувати у
Типи даних.
Дані в програмуванні являють собою величини, які опрацьовуються програмою. Вони поділяються на :
- константи та змінні;
- скалярні та структуровані;
- стандартні та дані користувача.
Константи – це величини, що не змінюють своїх значень в ході виконання програми. Змінні – об'єкти, що можуть приймати різні значення. Але це не означає, що змінна обов'язково повинна прийняти інше значення. Далі вважатимемо, основним об'єктом програми є змінна.
Скалярні величини являють
собою прості значення. Тобто, скалярний
об'єкт може приймати в будь-який
момент виконання програми лише одне
якесь значення. Структуровані величини
складаються з декількох
Стандартні величини реалізовані в трансляторі мови ПАСКАЛЬ, тому їх можна використовувати без додаткового оголошення. Крім того, користувач може оголошувати і використовувати власні величини, які називаються даними користувача.
Тип даних визначає множину значень, що може приймати змінна. Кожній змінній в програмі необхідно задати один, і тільки один тип даних. Хоча ПАСКАЛЬ може опрацьовувати достатньо складні типи даних, усі вони складаються з простих (неструктурованих) типів.
Вивчення типів даних розпочнемо зі скалярних стандартних типів даних. Їх в ПАСКАЛІ є чотири: integer (тип цілих чисел) , real (тип дійсних чисел), char (літерний тип) та boolean (логічний тип).
У ТУРБО ПАСКАЛЬ існує п'ять вбудованих цілочисельних типів: Shortint (коротке ціле), Integer (ціле), Longint (довге ціле), Byte (довжиною в байт) і Word (довжиною в слово). Кожний тип визначає певну підмножину цілих чисел, як це показано таблиці 4.1.
Таблиця 1. Вбудовані цілочисельні типи
Тип |
Діапазон |
Формат |
Shortint |
-128 .. 127 |
8 бітів із знаком |
Integer |
-32768 .. 32767 |
16 бітів із знаком |
Longint |
-2147483648 .. 2147483647 |
32 біта зі знаком |
Byte |
0 .. 255 |
|
8 бітів без знака |
Word | |
0 .. 65535 |
16 бітів без знака |
До дійсного типу відноситься підмножина дійсних чисел, що можуть бути подані у форматі з плаваючою точкою з фіксованим числом цифр.
Є п'ять видів дійсних типів: Real, Single, Double, Extended і Comp.
Дійсні типи розрізняються діапазоном і точністю пов'язаних з ними значень. Основним є перший тип, тому детально зупинимось саме на його вивченні.
Перш за все, дані дійсного типу можуть подаватись у двох формах: з фіксованою точкою та плаваючою точкою (експоненційній формі). Перша форма подання чисел більш звична. В ній явно задана ціла та дробова частина, які відокремлені точкою Так, числа 2.729, -89.084109, 134 подані у формі з фіксованою точкою.
Експоненційна форма подає
число у так званому
Таблиця 2. Запис дійсних чисел
Форма з фіксованою точкою |
Експоненційна форма |
1.4529 |
1.4529000000Е+00 |
0.000029 |
2.9000000000Е-05 |
39870 |
3.9870000000Е+04 |
Дані булевого типу (іноді його називають логічним) можуть приймати значення, обумовлені стандартними ідентифікаторами true (істина) і false (неправда). При виконанні операцій відношення вважають справедливим співвідношенням: false Змінна булевого типу займає в пам'яті 1 байт.
Значенням змінної літерного типу може бути один із символів, що входять у таблицю символів.. Символи впорядковані один щодо одного відповідно до їх значень в коді ASCII, наприклад: "А" < "У". Значення кодів символів у ASCII змінюються від 0 до 255. Змінна символьного типу займає один байт пам'яті.
Особливості архітектури програми в ос windows
Об’ектно-орієнтоване програмування - це не просто сучасна технологія створення програмних продуктів, а новий загальновизнаний спосіб мислення. Об’ектно-орієнтований підхід істотно знижує складність програмних продуктів, що дозволяє розроблювачам мов програмування з самого початку закласти в них можливості рішення чималої кількості широко розповсюджених задач. Причому це стосується практично всіх аспектів реалізації програм, у тому числі й алгоритмічних частин, і фрагментів програм, керуючих даними.
ПРАКТИЧНА ЧАСТИНА
Завдання 1
Використовуючи структуру, що розгалужується, скласти блок-схему обчислення значення складеної функції, що має різний вид на різних ділянках аргументу, потім скласти програму, що реалізує даний алгоритм (значення аргументу функції вводиться із клавіатури).
Складена функція задана в такий спосіб:
Блок-схема
Код програми
{$APPTYPE CONSOLE}
uses
SysUtils,Math;
Var x,y: real;
Begin
writeln;
writeln(' Variant 6');
writeln('Programma vvodit znachennya argumenta X i obchislyuye znachennya funkcii Y');
writeln(' |2.5*Power(x,3)+6*sqr(2)-30 x>1.5');
writeln('Y= |x+1 x<0');
writeln(' |x 0<=x<=1.5');
writeln;
write('vvedite x= ');
readln(x);
If x>1.5 then
y:=2.5*Power(x,3)+6*sqr(2)-30
Else
If x<0 then
y:=x
Else
y:=x+1;
writeln('Y= ', y:7:3);
readln;
end.
Скріншоти програми
Завдання 2
Одиниці довжини пронумеровані в такий спосіб: 1 - дециметр, 2 - кілометр, 3 - метр, 4 - міліметр, 5 - сантиметр. Дано номер одиниці довжини й довжина відрізка L у цих одиницях (речовинне число). Вивести довжину даного відрізка в метрах.
Блок-схема
Код програми
Program LR2;
{$APPTYPE CONSOLE}
uses
SysUtils;
var n: integer; l:real;
begin
writeln;
writeln(' Variant 6');
writeln('Programma vyvodit dovjinu danogo vіdrіzka v metrah');
writeln;
write('Vvedite nomer yedenicu izmerenia, 1 - decimetr, 2 - kіlometr, 3 - metr, 4 - mіlіmetr, 5 - santimetr: ');
readln(n);
write('Vvedite dovjinu vіdrіzka: ');
readln(l);
case n of
1: write(l:5:2, 'dm=',l/10:5:2, 'm');
2: write(l:5:2, 'km=',l*1000:5:2, 'm');
3: write(l:5:2, 'm=', l:5:2, 'm');
4: write(l:5:2, 'mm=',l/1000:5:2, 'm');
5: write(l:5:2, 'sm=',l/100:5:2, 'm');
else write('pomylka');
end;
readln;
end.
Скріншоти програми
Завдання 3
Скласти й програму для заповнення таблиці значень функції y = f(x) на відрізку із зазначеним кроком зміни аргументу. Вид функції заданий завданні № 1. Значення функції виводити з точністю до тисячних часток.
Блок-схема
Код програми
Program LR3;
{$APPTYPE CONSOLE}
uses
SysUtils,Math;
Const h=0.5;
Var x,y:real;
Begin
writeln;
writeln(' Variant 6');
writeln(' Programma dlya zapolneniya tablicy znachenii funkcii');
writeln(' |2.5*Power(x,3)+6*sqr(2)-30 x>1.5');
writeln('Y= |x+1 x<0');
writeln(' |x 0<=x<=1.5');
writeln('na otrezke [0; 5] s shagom 0.5');
writeln;
writeln;
x:=-2;
While x<=3 do
Begin
If x>1.5 then
y:=2.5*Power(x,3)+6*sqr(2)-30
Else
If x<0 then
y:=x
Else
y:=x+1;
writeln('Y= ', y:7:3);
x:=x+h
end;
Readln;
End.
Скріншот програми
Завдання 4
Скласти блок-схему й програму табулювання двох функцій S і Y у заданому діапазоні зміни аргументу x є [0,1; 1]. Тут n - число доданків суми
S= .
Результат табулювання вивести у формі таблиці.
Блок-схема
Код програми
program LR4;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
const n=25;
h=0.05;
var i:byte;
x,y,s,slag:real;
function fact(n: integer): integer;
begin
if n > 1 then fact := n * fact(n-1) // функция вызывает сама себя
else fact:= 1; // факториал 1 равен 1
end;
Begin
writeln;
writeln(' Variant 6');
writeln(' Programma tabulirovaniya funkcii, a takje vychisleniya summy ryada ');
writeln;
writeln ('! x ! y ! s !');
x:=0.1;
while x<1+h do
begin
y:=exp(x*cos(pi/4))*cos(x*sin(
s:=1; { Початкове значення суми, включаючи нульовий доданок}
slag:=1; {Значення нульового доданка}
for i:=1 to n do
begin
slag:= cos(i*pi/4)*power(x,i)/fact(i)
s:=s+slag;
end;
writeln('|',x:7:2,' |',y:7:3,' |',s:7:3,' |');
x:=x+h;
end;
readln;
end.
Скріншот програми
Завдання 5
У масиві A=(a1, а2, ..., аn) видалити всі негативні елементи, що підряд ідуть, що йдуть слідом за мінімальним елементом масиву.
Блок-схема
Код програми
program LR5;
{$APPTYPE CONSOLE}
uses
SysUtils;
type arr=array[1..15] of integer;
var a:arr; {массив}
i,j,n: byte; {индексы, длина массива}
i_min: byte; {индекс максимального элемента массива}
min:integer; {максимальный элемент}
begin
writeln;
writeln(' Variant 6');
writeln(' Dan odnomernyi massiv celyh chisel.');
writeln(' Udalit vse otricatelniye elementy, raspolojennye sprava ot minmalnogo ');
writeln;
{$R+} {Включение контроля значений индексов}
n:=15;
randomize;
writeln('Ishodnyi massiv:');
for i:=1 to n do {генерация элементов массива}
begin
a[i]:=-20+random(41); {в диапазоне [-20; 20]}
write(a[i]:4);
end;
writeln;
min:=a[1];
i_min:=1;
for i:=2 to n do {поиск максимального элемента массива}
if a[i]<min then
begin
min:=a[i];
i_min:=i;
end;
i:=i_min+1;
while i<=n do {цикл для проверки элементов на знак }
begin
if a[i]<0 then {если элемент отрицательный, то}
begin
for j:=i to n-1 do {цикл удаления i-го элемента}
a[j]:=a[j+1];
n:=n-1; {уменьшение длины массива}
end
else
i:=i+1; {иначе переход к следующему элементу}
end;
writeln('Rezultat obrabotki:');
for i:=1 to i_min do
write(a[i]:4);
readln;
{$R-} {Выключение контроля значений индексов}
end.
Скріншоти програми
Завдання 6
Дано матрицю А розмірності n x n. Знайти й вивести той рядок у цій матриці, що містить найбільшу кількість парних чисел.
Блок-схема
Код програми
program LR6;
{$APPTYPE CONSOLE}
uses
SysUtils;
const n=7;
type matr=array[1..n,1..n] of integer;
var a:matr;
i,j,par,max_par,i_par:integer;
begin
writeln;
writeln(' Variant 6');
writeln;
{$R+} {Включение контроля значений индексов}
writeln('Ishodnaya matrica');
randomize;
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(100);
write(a[i,j]:3);
end;
writeln;
end;
max_par:=0;
for i:=1 to n do
begin
par:=0;
for j:=1 to n do
begin
if a[i,j] mod 2 =0 then
par:=par+1;
end;
if par>max_par then
begin
max_par:=par;
i_par:=i;
end;
end;
writeln;
writeln('Iskomaya stroka:');
for j:=1 to n do
write(a[i_par,j]:3);
writeln;
readln;
{$R-}
end.
Скріншоти програми
Завдання 7
Дано масив з n слів довільної довжини (довжина слова не перевищує 80 символів). Як символи можуть використовуватися тільки арабські цифри. Видалити з масиву слово, що містить найбільшу кількість парних цифр.
Блок-схема
Код програми
program LR7;
{$APPTYPE CONSOLE}
uses
SysUtils;
type T_str=array [1..10] of string[80];
T_set=set of char;
var s:T_str; {массив слов}
alf:T_set; {множество символов}
n, {количество слов}
i,j:byte; {индексы}
cod,
{код ошибки преобразования
k,
{число, полученное
tmp, {сумма цифр слова}
sum:integer; {сумма цифр всех слов}
function OddEven(s:String):Boolean;
var i,o,e:integer;
begin
o:=0;e:=0;
for i:=1 to length(s) do
if s[i] in ['2','4','6','8'] then inc(o) else inc(e);
OddEven:=o>e;
end;
begin
writeln;
writeln(' Variant 6');
writeln;
alf:=['A'..'Z','0'..'9'];
{задается множество
repeat
write ('Vvedite kolichestvo slov (ne bolee 10) ');
readln(n); {ввод числа слов}
if not (n in [1..10]) then
begin
writeln;
writeln ('Ошибка ввода!');
writeln;
end;
until (n in [1..10]);
for i:=1 to n do
begin
write ('vvedite ',i,'-e slovo ');
readln(s[i]); {ввод i-го слова}
tmp:=0; {обнуление суммы цифр i-го слова}
for j:=length(s[i]) downto 1 do
if UpCase(s[i,j]) in alf then {проверка допустимости j-
го символа i-го слова}
begin
if s[i,j] in ['0'..'9'] then {если j-й символ i-го
слова - цифра}
begin
val(s[i,j],k,cod); {преобразование символа в число}
tmp:=tmp+k; {накапливается сумма цифр i-
го слова}
end
end
else
begin
writeln('Vstretilsya nedopustimyi simvol!');