Обчислення иразів у програмуванні, Детальна інформація
Обчислення иразів у програмуванні
fp : case tempc of
'0'..'9' : begin
d := d/10;
v := v + (ord(tempc) - ord('0'))*d;
tempc := getc
end
else cp := out
end
end; { оператора case cp of та циклу while}
getcon := v
end
Функція getnam записується аналогічно й залишається для самостійної розробки.
9.5. Читання символів
Нарешті ми уточнимо, як читаються символи виразу з тексту, написавши функцію getc добування наступного символу.
Її розробку почнемо з уточнення задання виразу. Нехай вираз записано в текстовому файлі, у кількох рядках, довжини яких не більше 80. Ознакою кінця виразу є кінець файла. Суміжні лексеми відокремлюються довільними послідовностями пропусків, можливо, порожніми.
Скористаємося обмеженням на довжину рядків тексту та організуємо читання тексту не окремими символами, а рядками. Черговий рядок стає значенням змінної рядкового типу Str, яка називається образом вхідного рядка, або буфером. Саме з буфера символи по одному добуваються за викликів функції getc.
Функцію getc разом із іншими необхідними означеннями помістимо в окремий модуль Inbuf. Створюючи цей модуль, ми повністю відокремлюємо обробку символів виразу від їх конкретного джерела – файла на диску, клавіатури чи ще чогось.
Додамо указання використання модуля Inbuf до модуля Glx.
Для роботи з буфером, тобто змінною buf типу Str, додамо змінні bufl, bufp та tempc, що зберігатимуть відповідно довжину буфера (кількість символів), позицію в ньому, якою закінчується оброблена частина виразу, та її останній, або поточний символ. Означимо ще сталу finch = chr(0), яка стає значенням поточного символу при закінченні виразу. Стала finch та змінна tempc експортуватимуться з модуля, і за його межами рядок "буде видно крізь віконце tempc".
Перенесемо означення імен finch і tempc з модуля Glx до модуля Inbuf.
Ініціалізацію змінних модуля задає процедура bufinit, виклик якої записано в розділі ініціалізації. Вона також забезпечує можливість задати ім'я файла, з якого треба читати вираз. Функція newln описує заповнення буфера новим вхідним рядком та повернення його першого символу.
Модуль Inbuf має такий загальний вигляд:
Unit Inbuf ( input, output );
Interface
const finch=chr(0);
var tempc : char;
function getc : char;
Implementation
const bufml = 80;
type Str=string[bufml];
'0'..'9' : begin
d := d/10;
v := v + (ord(tempc) - ord('0'))*d;
tempc := getc
end
else cp := out
end
end; { оператора case cp of та циклу while}
getcon := v
end
Функція getnam записується аналогічно й залишається для самостійної розробки.
9.5. Читання символів
Нарешті ми уточнимо, як читаються символи виразу з тексту, написавши функцію getc добування наступного символу.
Її розробку почнемо з уточнення задання виразу. Нехай вираз записано в текстовому файлі, у кількох рядках, довжини яких не більше 80. Ознакою кінця виразу є кінець файла. Суміжні лексеми відокремлюються довільними послідовностями пропусків, можливо, порожніми.
Скористаємося обмеженням на довжину рядків тексту та організуємо читання тексту не окремими символами, а рядками. Черговий рядок стає значенням змінної рядкового типу Str, яка називається образом вхідного рядка, або буфером. Саме з буфера символи по одному добуваються за викликів функції getc.
Функцію getc разом із іншими необхідними означеннями помістимо в окремий модуль Inbuf. Створюючи цей модуль, ми повністю відокремлюємо обробку символів виразу від їх конкретного джерела – файла на диску, клавіатури чи ще чогось.
Додамо указання використання модуля Inbuf до модуля Glx.
Для роботи з буфером, тобто змінною buf типу Str, додамо змінні bufl, bufp та tempc, що зберігатимуть відповідно довжину буфера (кількість символів), позицію в ньому, якою закінчується оброблена частина виразу, та її останній, або поточний символ. Означимо ще сталу finch = chr(0), яка стає значенням поточного символу при закінченні виразу. Стала finch та змінна tempc експортуватимуться з модуля, і за його межами рядок "буде видно крізь віконце tempc".
Перенесемо означення імен finch і tempc з модуля Glx до модуля Inbuf.
Ініціалізацію змінних модуля задає процедура bufinit, виклик якої записано в розділі ініціалізації. Вона також забезпечує можливість задати ім'я файла, з якого треба читати вираз. Функція newln описує заповнення буфера новим вхідним рядком та повернення його першого символу.
Модуль Inbuf має такий загальний вигляд:
Unit Inbuf ( input, output );
Interface
const finch=chr(0);
var tempc : char;
function getc : char;
Implementation
const bufml = 80;
type Str=string[bufml];
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021