Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт з практики з основ програмування та алгори...doc
Скачиваний:
11
Добавлен:
17.09.2019
Размер:
482 Кб
Скачать
☆

4 Блок-схема

Так

Ні

Присвоєння змінної файлу

n=1, q=1

Відкриття файлу для зчитування

5 Таблиця ідентифікації

Позначення у програмі

Пояснення

words

Масив рядкового типу для слів

symvols

Масив рядкового типу для розділових знаків

f1

Файлова змінна

str

Змінна ряд

кового типу для запису тексту з файлу

word

Змінна рядкового типу для формування слова перед занесенням в масив

symvol

Змінна рядкового типу для збереження розділових знаків перед занесенням в масив

len

Змінна для збереження значення довжини зчитаного рядка

і, j

Лічильники циклу

q,n

Лічильники масиву слів, та масиву розділових знаків

e

Змінна для перевірки виконання програми

a

Константа зі значенням усіх голосних латинських букв

inf

Константа з інформацією про програму

way

Змінна в якій міститься шлях до файлу

let

Константа з значенням всіх латинських букв

6 Код програми

program files;

uses crt;

const inf='Vodvud Andriy CS-23';

a=['a','e','y','u','i','o'];

let=['a'..'z','A'..'Z'];

var words,symvols:array[1..70] of string;

f1:text;

way,str,word,symvol:string;

n,len,i,j,q:integer;

e:boolean;

begin

clrscr;

Writeln('vvedit shlah do faylu');

readln(way);

assign(f1,way);

n:=1; q:=1;

reset(f1);

while not eof(f1) do

begin

readln(f1,str);

len:=length(str);

i:=1;

while i<=len do

if str[i] in let then

begin

word:=str[i];

inc(i);

while (i<=len) and (str[i] in let) do

begin

word:=word+str[i];

inc(i);

end;

words[q]:=word;

inc(q);

end else begin

symvol:=str[i];

inc(i);

while(i<len) and not (str[i] in let) do

begin

symvol:=symvol+str[i];

inc(i);

end;

symvols[n]:=symvol;

inc(n);

end;

end;

writeln(inf);

writeln;

for i:=1 to q do

write(words[i]+symvols[i]);

for i:=1 to q do

begin

word:=words[i];

if word[length(word)] in a then

begin

e:=true;

readkey;

clrscr;

writeln(inf);

writeln;

for j:=1 to i-1 do

write(words[j]+symvols[j]);

textcolor(red);

write(words[i]+symvols[i]);

textcolor(7);

for j:=i+1 to q do

write(words[j]+symvols[j]);

writeln;

writeln('bucv y slovi:',length(words[i]));

end

else e:=false

end;

if e=false then writeln('V faily nemay sliv, scho zacinchuuytsa na golosnu bukvu');

readln;

end.

7 Опис програми

Дана програма здійснює дії над текстови файлом. Стандартне задання в програмі файлової змінної здійснюється таким чином:

Var f1: text;

Для роботи з файлом використовувались наступні процедури:

Assign( f1, 'TEXT.DAT’);

де f1- змінна файлового типу, а рядковий вираз ‘TEXT.DAT’ містить повну назву файла, яка задовольняє вимогам операційної системи, або повний шлях до файлу;

Reset(f1); відкриває вже існуючий файл f1;

В даній програмі є константи і змінні. Константами називаються елементи даних, значення яких розміщені в описовій частині програми і в процесі виконання програми не змінюються (к=3):

const inf='Vodvud Andriy CS-23';

a=[‘a’,’e’,’y’,’u’,’i’,’o’]; {Всі голосні букви}

let=['a'..'z','A'..'Z']; {Всі можливі латинські букви}

Змінними називаються величини, які можуть змінювати свої значення в процесі виконання програми. Задання змінних в програмі здійснюється таким чином: Var f1: text; {Задання файлової змінної}

words,symbols:array[1..100] of string;

way,str,word,symbol:string;

n,len,i,j,q:integer;

e:boolean;

Після приєднання до файлу файлової змінної, та відкриття файлу з нього зчитуються дані за допомогою команди

Readln (f1,str), коли вона виконається в рядкову змінну str заноситься перший рядок текстового файлу, але оскільки не відомо скільки в файлі рядків, то ця команда записана в циклі:

while not eof(f1) do {Цикл виконується до завершення файлу}

begin

readln(f1,str); {Зчитування рядка тексту в змінну}

len:=length(str); {Визначає довжину рядка}

Для того, по натисканню довільної клавіші програма по черзі виділяла кожне з слів тексту, у яких перша і остання літери збігаються я вирішив занести всі слова та всі розділові знаки в два різні масиви : words, sumbols.

Наступний код програми демонструє занесення слів в масив words:

i:=1; {Присвоюю лічильнику цикла початкове значення}

while i<=len do {В даному циклі аналізується кожний символ з зчитаного рядка }

if str[i] in let then {Якщо даний символ буква, то вона повинна бути записана в змінну word і сформувати початок слова}

begin

word:=str[i]; {Запис літери в змінну}

inc(i); {Береться наступний символ}

while (i<=len) and (str[i] in let) do {В цьому циклі продовжується аналіз кожного символу, і якщо символ буква, і ще не досягнутий кінець рядка, то літери будуть послідовно записуватись формуючи слово}

begin

word:=word+str[i];

inc(i);

end; {Якщо попадається не буква то даний цикл зупиняється, і сформоване перед цим слово з змінної word заноситься в цикл words}

words[q]:=word;

inc(q); {Щоб елементи масиву записувались послідовно, я ввів

лічильник q, також він рахує скільки всього символівє в тексті}

end

Якщо символ не буква, а розділовий знак, або пропуск, то він по аналогії з записом слів в масив записується в масив символів:

else begin

symbol:=str[i]; {Якщо символ не задовольняє умову записану вище (if str[i] in let then ), то він автоматично записується в змінну symbol }

inc(i); {Береться наступний сивол}

while (i<len) and not (str[i] in let) do

begin

symbol:=symbol+str[i]; {Якщо попадаються два, або більше символів підряд (наприклад пропуск та крапка) , то вони записуються один за одним, формуючи один елемент }

inc(i); {Береться наступний сивол}

end;

symbols[n]:=symbol; {Якщо рядок закінчився, або попалася літера, значення з змінної symbol записується в масив.}

inc(n); { По аналогії з записом в масив слів я використав окремий лічильник, щоб значення записувались послідовно}

end;

end;

Тепер в програмі сформовано два масиви , з словами, для того, щоб виконати умову задачі, та з розділовими знаками, для того, щоб текст, який виводиться на екран відповідав тексту в файлі.

Вивід на екран результату виконання відбувається таким чином.

writeln(inf); {Вивід на екран інформації про програму}

writeln; {Пропуск рядка}

for i:=1 to q do {Так, як індекси слів, та індекси розділових знаків збігаються, на екран виведеться весь текст в правильній послідовності символів }

write(words[i]+symbols[i]); {Спершу виводиться слово, а тоді знак(ки) з відповідним йому індексом}

for i:=1 to q do {В цьому циклі відбувається остаточний вивід програми, згідно з завданням}

begin

word:=words[i]; {Змінній word, присвоюється значення слова з масиву, для того, щоб визначити слова, які закінчуються на голосну букву}

if word[length(word)] in a then

begin

e:=true; {Змінна для перевірки, чи не виконується програма}

readkey; {Якщо перша і остання літери слова однакові, і слово не складається з однієї літери, то очікується на натиснення клавіші}

clrscr; {Очишчення екрану}

writeln(inf); {Вивід інформацції на екран}

writeln;

for j:=1 to i-1 do {В цьому циклі відбувається вивід на екран

всіх слів та розділових знаків, які стоять перед знайденим словом (яке задовільняє умову)}

write(words[j]+symbols[j]);

textcolor(red); {Зміна кольору тексту який буде виводитись надалі на червоний}

write(words[i]+symbols[i]); {Вивід на екран, знайденого слова червони кольором}

textcolor(7); {Зміна кольору виведення тексту на стандартний}

for j:=i+1 to q do {В цьому циклі виводяться всі слова та розділові знаки, які лежать після знайденого слова}

write(words[j]+symbols[j]);

writeln;

writeln(‘bucv u slovy: ',length(words[i])); {Також за умовою задачі потрібно виводити кількість букв у слові, яке задовольняє умову, що закінчуються на голосну букву }

end;

end;

if e=false then writeln('V faily nemay sliv, scho zakinchuutsa na golosnu bukvu'); { Якшо ні одного слова, яке задовольняє умову немає, то про це виводиться повідомлення}

readln;

end.

В свою програму я підключив модуль CRT', який містить засоби керування дисплеєм та клавіатурою комп'ютера. Процедури, з модуля CRT, використані в програмі:

ClrScr-повністю очищає екран і поміщає курсор в лівий верхній кут. TextColor(Color:byte)- встановлює колір символів, які виводяться