45839 (Программа текстовый редактор), страница 2

2016-07-31СтудИзба

Описание файла

Документ из архива "Программа текстовый редактор", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "45839"

Текст 2 страницы из документа "45839"

Для запуска данной программы необходимо наличие персонального компьютера IBM PC/XT c операционной системой MS-DOS.

Необходимый объем оперативной памяти - 400 Кбайт.

Дла запуска программы необходимо сделать текущем каталог с программой tr.exe и вызвать её на выполнение.

Программа работает в текстовом режиме 80х25 символов.

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

Управление программой усуществляется с клавиатуры.

8 Описание работы программы

После своей загрузки программа осуществляет оформление экрана , вывод в нижнюю часть экрана строки подсказки , в которой содержется информация о функциональных клавишах. Пользователь может вводить и редактировать текст , задавать формат текста (левый отступ , число символов в строке) , центровать нужную строку , осуществлять поиск нужной фразы по шаблону , считать необходимый файл с диска , записать текст в файл на диске , выйти из прграммы.

9 Тестирование программы

Для полной проверки работоспособности программы необходимо её протестировать.

План тестирования программы "Текстовый редактор" состоит в следующем:

1) Создание отдельно от программы файла с исходным текстом.

2) Загрузка программы tr.exe.

3) Загрузка файла test.in.

4) Редактирование текста.

5) Изменение параметров строки и центрирование отдельных строк текста.

6) Создание шаблона для поиска и поиск фразы в тексте по этому шаблону.

7) Запись отредактированного текста в файл test.out.

8) Выход из программы.

Исходный тестовый файл test.in содержит в себе следующий текст:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования текста

Тестирование программы

Далее в пункте "Результаты работы программы" приводится распечатка тестирования программы по пунктам плана тестирования и результатов тестирования.

10 Результаты работы программы

1) Создание отдельно от программы файла с исходным текстом:

Файл test.in содержит в себе следующий текст:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

2) Загрузка программы tr.exe:

ESC - Меню, F4 - Поиск, Alt-C - центровка 0 0

3) Загрузка файла test.in:

1) Сохранить файл

2) Считать файл

3) Ввод шаблона

4) Параметры

5) Выход из программы

Введите имя файла: test.in а 0 0

4) Редактирование текста:

Файл для тестирования программы tr.exe

Эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

ESC - Меню, F4 - Поиск, Alt-C - центровка 0 0

5) Изменение параметров строки и центрирование отдельных строк текста:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

1) Сохранить файл

2) Считать файл

3) Ввод шаблона

4) Параметры

5) Выход из программы

Введите левый отступ: иск, A5 а 0 0

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

1) Сохранить файл

2) Считать файл

3) Ввод шаблона

4) Параметры

5) Выход из программы

Введите количество символов 40 а 0 0

Центровка 3 строки:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

ESC - Меню, F4 - Поиск, Alt-C - центровка 0 3

6) Создание шаблона для поиска и поиск фразы в тексте по этому шаблону:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

1) Сохранить файл

2) Считать файл

3) Ввод шаблона

4) Параметры

5) Выход из программы

Введите шаблон для поиска: текст

эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

ESC - Меню, F4 - Поиск, Alt-C - центровка 56 0

7) Запись отредактированного текста в файл test.out:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

1) Сохранить файл

2) Считать файл

3) Ввод шаблона

4) Параметры

5) Выход из программы

Введите имя файла: test.out а 0 0

8) Выход из программы:

Файл для тестирования программы tr.exe

эта программа предназначена для ввода и редактирования текста

ТЕСТИРОВАНИЕ ПРОГРАММЫ

1) Сохранить файл

2) Считать файл

3) Ввод шаблона

4) Параметры

5) Выход из программы

ESC - Меню, F4 - Поиск, Alt-C - центровка 0 0

Список литературы

1.Бьярн Страуструп. Язык программирования С++.в двух частях. Пер. с англ. Киев:"ДиаСофт",1993.-296 с.,ил.

2.Корриган Джон Компьютерная графика: Секреты и решения: Пер с англ. -М.:Энтроп, 1995. - 352 с., ил.

ПРИЛОЖЕНИЕ 1

Распечатка программы

#include

#include

#include

#include

#include

// Указатель на начало текста

char * text;

// Длинна текста

long len;

// Вывод на экран

// Входные данные:

// Адрес начала верхней строки

// Позиция курсора на ~бесконечном~ по ширине экране (x,y)

void output(char * a,int x,int ky) {

// Количество непечатаемых символов

int np=(x/80)*80;

// Реальная координата курсора на экране

int rx=x-np;

// Координата Y вывода

int y;

char * ot=a;

clrscr();

int n;

y=0;

do {

// Пропуск непечатаемых символов

n=np;

while ((n>0)&&(*ot!=13)) {

ot++;

n--;

}

// Если есть, что печатать на этой строке - печать

if (*ot!=13) {

// Печать строки

n=80;

while ((n>0)&&(*ot!=13)) {

cout<<*ot;

ot++;

n--;

}

// Если строка окнчилась раньше края экрана - перевести строку

if (*ot==13) {

cout<<(char) 13<<(char) 10;

ot++;

if (*ot==10) ot++;

} else {

while (*ot!=13) ot++;

if (*ot==13) ot++;

if (*ot==10) ot++;

}

y++;

} else {

// Если печатать нечего - перевод строки

cout<<(char) 13<<(char) 10;

ot++;

y++;

if (*ot==10) ot++;

}

// Пока не распечатаны все строки

} while (y<23);

// Вывод подсказки и курсора

gotoxy(5,25);

textcolor(14);

cprintf(

"ESC - Меню, F4 - Поиск, Alt-C - центровка %4d %4d ",x,ky);

textcolor(15);

gotoxy(rx+1,ky+1);

}

// Ввод строки

// s - указатель на строку

// lng - Максимальная длинна

// x,y - координаты

void SInput(char * s,int lng,int x,int y) {

lng--;

char rs[100]; // Временная строка

strcpy(rs,s); // Копирование резерва строки

int n; // Счетчик

char c; // Символ

// Вывод пустой строки

textbackground(2);

textcolor(15);

gotoxy(x,y);

for (n=0;n

n=strlen(s); // Положение курсора

do {

// Вывод строки

gotoxy(x,y);

cprintf("%s ",s);

gotoxy(x+n,y);

c=getch(); // Считывание символа с клавиатуры

if ((c!=13)&&(c!=27)&&(c!=8)) {

// Нажата символьная клавиша

if (n<(lng-1)) {

// Добавление символа

s[n+1]=0;

s[n]=c;

n++;

}

} else {

if (c==8) {

// Нажата клавиша BackSpace

if (n>0) {

n--;

s[n]=0;

}

}

}

// Выход, если ESC или ENTER

} while ((c!=27)&&(c!=13));

if(c==27) strcpy(s,rs); // Восстановление строки

// Стирание строки

textbackground(0);

textcolor(7);

gotoxy(x,y);

for (n=0;n

}

// Чтение файла

void load(char * p) {

char fname[25];

fname[0]=0;

FILE * f;

gotoxy(1,25);

printf(" Введите имя файла: ");

SInput(fname,20,21,25);

f=fopen(fname,"rb");

len=fread(p,32767,1,f);

fclose(f);

}

// Запись в файл

void save(char * p) {

char fname[25];

fname[0]=0;

char * pr;

pr=p;

len=0;

while((len<32767)&&((*pr!=13)||(*(pr+1)!=13))) {

len++;

pr++;

}

FILE * f;

gotoxy(1,25);

printf(" Введите имя файла: ");

SInput(fname,20,21,25);

f=fopen(fname,"wb");

fwrite(p,len,1,f);

fclose(f);

}

// Уничтожение информации - заполнение кодом "Перевод строки"

void reset(char * a,int n) {

for (int m=0;m

}

// Вверх на строку

char * up(char * a,char * b) {

if (a==b) return b;

b--;

while ((a!=b)&&(*b!=13)) b--;

if (a==b) return b;

if (*b==13) b--;

if (a==b) return b;

while ((a!=b)&&(*b!=13)) b--;

if (*b==13) b++;

if (*b==10) b++;

return b;

}

// Вниз на строку

char * down(char * a,char * b) {

while (((a+32767)>=b)&&(*b!=13)) b++;

if (*b==13) b++;

if (*b==10) b++;

return b;

}

// Обработка меню

int menu(int x,int y,char * capt) {

int n,m; // Счетчики

int num; // Количество пунктов

int k; // Выбранный пункт

char * pt; // Временный указатель на символ

char c; // Считанный с клавиатуры символ

// Вычисляем количество пунктов

num=strlen(capt)/20;

// Курсор на нулевой элемент

k=0;

// Бесконечный цикл обработки

for (;;) {

// Вывод меню

pt=capt;

for (n=0;n

gotoxy(x,y+n);

// Закраска пункта, на который указывает курсор

if (n==k) {

// Закраска

textbackground(12);

textcolor(14);

} else {

// Нормальный

textbackground(3);

textcolor(1);

}

cprintf("%d) ",n+1);

for (m=0;m<20;m++) cprintf("%c",*(pt++));

}

textbackground(3);

textcolor(1);

// Опрос клавиатуры

c=getch();

if (!c) c=getch();

// Проверка, не нажата ли клавиша с цифрой

if (((c-'1')>=0)&&((c-'1')

// Установка указателя в зависимости от нажатой цифры

k=c-'1';

// Запись в буфер клавиатуры символа ENTER

ungetch(13);

} else {

// Анализ

switch(c) {

// Вверх

case (72):

if (k>0) k--; else k=num-1;

break;

// Вниз

case (80):

if (k<(num-1)) k++; else k=0;

break;

// Выход по ESC - возвращается -1

case (27):

return -1;

// Выход по ENTER - возвращается номер пункта

case (13): return k;

}

}

}

}

// Добавление символа в текст

void add(char * st,char * a,int x,int y,char c) {

int n;

int d;

n=y;

char * p;

// Перемещение указателя к началу строки

while (n>0) {

while ((a<(st+32767))&&(*a!=13)) a++;

if (*a==13) a++;

if (*a==10) a++;

n--;

}

// Подсчет символов в строке

n=0;

while ((*(a+n)!=13)&&((a+n)<(st+32767))) n++;

if (n

// Если производится вставка в строку

a=a+n;

d=x-n;

p=st+32767;

while ((p-d)!=a) {

*p=*(p-d-1);

p--;

}

p=a;

while (d!=0) {

*p=' ';

d--;

p++;

}

*p=c;

} else {

// Если производится добавление к строке не только символа,

// но и пробелов до него

a=a+x;

p=st+32767;

while (p!=a) {

*p=*(p-1);

p--;

}

*a=c;

}

}

// Поиск конца строки - фактически возвращает длину строки

int end(char * st,char * a,int,int y) {

int n;

n=y;

char * p;

while (n>0) {

while ((a<(st+32767))&&(*a!=13)) a++;

if (*a==13) a++;

if (*a==10) a++;

n--;

}

n=0;

while ((*(a+n)!=13)&&((a+n)<(st+32767))) n++;

return n;

}

// Удаление символа

void del(char *st,char * a,int x,int y) {

int n;

int d;

n=y;

char * p;

// Поиск необходимого места в тексте

while (n>0) {

while ((a<(st+32767))&&(*a!=13)) a++;

if (*a==13) a++;

if (*a==10) a++;

n--;

}

n=0;

while ((*(a+n)!=13)&&((a+n)<(st+32767))) n++;

if (n

a+=x;

p=a;

n=*p;

// Удаление символа

while (a!=(st+32767)) {

*a=*(a+1);

a++;

}

// Если был удален "Перевод строки" и остался

// "Возврат каретки" либо наоборот, то удаляется еще один символ

if ((*p==13)&&(n==10)||(*p==10)&&(n==13)) {

while (p!=(st+32767)) {

*p=*(p+1);

p++;

}

}

}

// Поиск фрагмента в тексте, начиная с текущего положения курсора

void find(char * st,char * * scrs,int * x,int * y,char * b) {

char * a=*scrs;

int n;

int k;

int d;

n=*y;

char * p;

// Поиск текущего места

while (n>0) {

while ((a<(st+32767))&&(*a!=13)) a++;

if (*a==13) a++;

if (*a==10) a++;

n--;

}

n=0;

while ((*(a+n)!=13)&&((a+n)<(st+32767))) n++;

if (n<*x) *x=n;

a+=*x;

// Поиск фрагмента

do {

a++;

k=1;

for (n=0;n

if (a[n]!=b[n]) k=0;

} while ((k!=1)&&(a<(st+32767)));

if (k==1) {

// Если фрагмент найден - перемещение курсора

*x=0;

*y=0;

while ((*a!=13)&&(a!=st)) {

a--;

(*x)++;

}

if (*a==13) {

a++;

(*x)--;

}

if (*a==10) {

a++;

(*x)--;

}

*scrs=a;

}

}

// Ввод числа

// x,y - координаты

long DInput(int x,int y) {

char s[100]; // Временная строка

char *stpe;

long rz;

s[0]=0;

int n; // Счетчик

char c; // Символ

// Вывод пустой строки

textbackground(2);

textcolor(15);

gotoxy(x,y);

for (n=0;n<15;n++) cprintf(" ");

n=strlen(s); // Положение курсора

do {

// Вывод строки

gotoxy(x,y);

cprintf("%s ",s);

gotoxy(x+n,y);

c=getch(); // Считывание символа с клавиатуры

if ((c!=13)&&(c!=27)&&(c!=8)) {

// Нажата символьная клавиша

if (n<14) {

// Добавление цифры

if ((c>='0')&&(c<='9')) {

s[n+1]=0;

s[n]=c;

n++;

}

}

} else {

if (c==8) {

// Нажата клавиша BackSpace

if (n>0) {

n--;

s[n]=0;

}

}

}

// Выход, если ESC или ENTER

} while ((c!=27)&&(c!=13));

if(c==27) return 0;

// Стирание строки

textbackground(0);

textcolor(7);

gotoxy(x,y);

for (n=0;n<15;n++) cprintf(" ");

sscanf(s,"%ld",&rz);

return rz;

}

// Центровка текущей строки

void centr(char *st,char * a,int y,int left,int right) {

int n;

int d;

n=y;

// Поиск текущего местоположения

while (n>0) {

while ((a<(st+32767))&&(*a!=13)) a++;

if (*a==13) a++;

if (*a==10) a++;

n--;

}

// Удаление пробелов в начале строки

while ((*a==32)&&(!((*a==13)||(a==(st+32767))))) del(st,a,0,0);

// Подсчет длины строки

n=0;

while ((*(a+n)!=13)&&((a+n)<(st+32767))) n++;

// Определение количества добавляемых пробелов

if ((n>(right-left))||(n==0)) return;

d=left+((right-left)-n)/2;

// Добавление пробелов

for (n=0;n

}

// Основная программа

void main() {

// Границы текста

int left=0;

int right=60;

// Маска для поиска

char masks[40];

masks[0]=0;

// Положение курсора

char * scrs;

int x,y;

char c;

int n;

// Выделение памяти под текст

text=new char[32767];

len=0;

reset(text,32767);

scrs=text;

x=0;y=0;

// Цикл обработки данных

for (;;) {

textbackground(1);

textcolor(15);

// Вывод данных на экран

output(scrs,x,y);

// Считывание символа

c=getch();

// Обработка

switch (c) {

case (27):

// Вывод меню

switch (menu(30,5," Сохранить файл "

" Считать файл "

" Ввод шаблона "

" Параметры "

" Выход из программы "

"\x0")) {

case (0):

save(text);

break;

case (1):

reset(text,32767);

load(text);

break;

case (2):

gotoxy(1,25);

printf(" Введите шаблон для поиска: ");

SInput(masks,40,30,25);

break;

case (3):

gotoxy(1,25);

printf(" Введите левый отступ: ");

left=DInput(30,25);

gotoxy(1,25);

printf(" Введите количество символов в строке: ");

right=DInput(30,25);

break;

case (4):

textbackground(0);

textcolor(7);

clrscr();

return;

}

break;

case (0):

// Расширенный код - считывание значащей части

c=getch();

// обработка

switch(c) {

// Alt-C

case (46):

centr(text,scrs,y,left,right);

break;

// F4

case (62):

find(text,&scrs,&x,&y,masks);

break;

// Home

case (71):

x=0;

break;

// End

case (79):

x=end(text,scrs,x,y);

break;

// Delete

case (83):

del(text,scrs,x,y);

break;

// Стрелки перемещения курсора

case (72):

if (y>0) y--;

else scrs=up(text,scrs);

break;

case (80):

if (y<22) y++;

else scrs=down(text,scrs);

break;

case (77):

if (x<32767) x++;

break;

case (75):

if (x>0) x--;

break;

}

break;

// Enter

case (13):

add(text,scrs,x,y,10);

add(text,scrs,x,y,13);

if (y<22) y++; else down(text,scrs);

x=0;

break;

// BackSpace

case (8):

if (x>0) {

del(text,scrs,x-1,y);

x--;

}

break;

// Tab

case (9):

for (n=0;n<(5-(x-x/5));n++) add(text,scrs,x,y,' ');

x=x+(5-(x-x/5));

break;

// Остальные символы

default:

add(text,scrs,x,y,c);

x++;

}

}

}

ПРИЛОЖЕНИЕ 2

Алгоритм работы программы

Для подготовки данной работы были использованы материалы с сайта http://kurslab.chat.ru/

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
426
Средний доход
с одного платного файла
Обучение Подробнее