IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Обработка текстовых данных, Операции над ними
Earl_Ananiy
сообщение 28.01.2010 3:59
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской
Реальное имя: Ананий

Репутация: -  0  +


Разработать блок-схему алгоритма и составить программу обработки текстовых данных, хранящихся в произвольном файле на магнитном диске. Вид обработки данных ‴Включение в каждую строку заданной последовательности символов после символа с заданным номером‴. Текстовые данные, подлежащие обработке, заносятся в файл с помощью редактора текста. В программе предусмотреть ввод с терминала имен входного и выходного (в случае необходимости) файлов, вывод на печать входного и выходного файлов. Предусмотреть запись выходного файла на диск. Длина строки файла не должна превышать 80 символов.

Помогите доработать мою программу.

program kurs2;
Uses CRT;
Var
f:text;
n,m:string[80];
pos,i:integer;
Begin
clrscr;
writeln('pos');
readln(pos);
writeln('m');
readln(m);
Assign(f,'c:\kurs\input.txt');
reset(f);
read(f,n);
writeln('n=',n);
insert(m,n,pos);
Assign(f,'c:\kurs\output.txt');
rewrite(f);
write(f,n);
writeln('new=',n);
close(f);
readln;
end.

М
Граф Ананий, потрудись прочесть правила, пожалуйста, а также выполнять их (речь о п.5)

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Lapp
сообщение 28.01.2010 6:06
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Вот, как-то так.. Комменты по тексту.
program kurs2;
{никогда не вставляй CRT, если не жизненно важно}
Var
f,g: text; {тебе нужно два файла для параллельного ввода/вывода}
n,m:string[80];
pos,i:integer; {а зачем тебе i?}

Begin
{никогда не очищай экран, если не жизненно важно}
write('pos '); {лучше без Ln, но с пробелом или = в конце}
readln(pos);
write('Insertion '); {лучше не имя переменной, а что-то более говорящее}
readln(m);
{не пиши тут директорию явно, работай в текущей. Кому надо - введут полное имя}
Assign(f,'input.txt'); {вообще-то, имена файлов, кажется, надо было тоже ввести..}
reset(f);;
Assign(g,'output.txt');
rewrite(g);
while not EoF(f) do begin {нужен цикл по строкам до окончания файла}
readLn(f,n); {тут надо ReadLn, а не Read, иначе не прочтет вторую и дальше}
writeln('old=',n);
if Length(n)>=pos then {я бы проверил, есть ли вообще нужный символ..}
insert(m,n,pos+1); {нужно прибавить 1, иначе вставишь перед символом с номером pos}
WriteLn(g,n); {запись в выходной файл, тоже с Ln}
writeln('new=',n); {пересено из конца}
end;
Close(g);
close(f);
readln;
end.

Разбирайся, задавай вопросы. Пожалуйста, обрати внимание на форматирование кода - оно тебе очень поможет в будущем.

Еще одно: у тебя незакрытая файловая переменная f используется для нового файла - это грубая ошибка!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Earl_Ananiy
сообщение 28.01.2010 19:33
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской
Реальное имя: Ананий

Репутация: -  0  +


Цитата
Разбирайся, задавай вопросы. Пожалуйста, обрати внимание на форматирование кода - оно тебе очень поможет в будущем.


Что сделать для обработки, при введении текста с экрана.


тут я применил тэги цитаты и цвета. Нажми "Изменить - полное редактирование" - и увидишь, как. Lapp

Сообщение отредактировано: Lapp - 28.01.2010 19:44
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 28.01.2010 19:41
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Earl_Ananiy @ 28.01.2010 19:33) *
Что сделать для обработки, при введении текста с экрана.
Неясно, что ты имеешь в виду. Можешь сказать поподробнее? Вместо входного файла - ввод с клавы? да? Немного побольше слов, пожалуйста..


И, пожалуйста, используй тэги. Для кода - code, для цитаты - quote, и т.п. Видишь разные кнопочки над формой ввода? Они обрамляют выделенный текст тэгами. Выдели текст мышкой и нажми, например, B. А потом нажми кнопку предпросмотра (она внизу). Поэкспериментируй.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Earl_Ananiy
сообщение 28.01.2010 19:52
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской
Реальное имя: Ананий

Репутация: -  0  +


Цитата(Lapp @ 28.01.2010 19:41) *

Неясно, что ты имеешь в виду. Можешь сказать поподробнее? Вместо входного файла - ввод с клавы? да? Немного побольше слов, пожалуйста..
И, пожалуйста, используй тэги. Для кода - code, для цитаты - quote, и т.п. Видишь разные кнопочки над формой ввода? Они обрамляют выделенный текст тэгами. Выдели текст мышкой и нажми, например, B. А потом нажми кнопку предпросмотра (она внизу). Поэкспериментируй.


Код
Для ввода с клавиатуры.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 28.01.2010 20:18
Сообщение #6


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Earl_Ananiy @ 28.01.2010 19:52) *

Код
Для ввода с клавиатуры.


Граф, сделай еще попытку. Эта много понимания не добавила.. smile.gif

P.S.
Тэги кода - для САМОГО кода: Паскаль, Си.. Выбери в меню нужный пункт.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Earl_Ananiy
сообщение 28.01.2010 20:25
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской
Реальное имя: Ананий

Репутация: -  0  +


Цитата(Lapp @ 28.01.2010 20:18) *

Граф, сделай еще попытку. Эта много понимания не добавила.. smile.gif

P.S.
Тэги кода - для САМОГО кода: Паскаль, Си.. Выбери в меню нужный пункт.


Что то я сам запутался.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 28.01.2010 20:37
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Earl_Ananiy @ 28.01.2010 20:25) *
Что то я сам запутался.
Не страшно. smile.gif
Разбирайся, распутывайся.
Побольше экспериментируй.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Earl_Ananiy
сообщение 29.01.2010 9:13
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 10
Пол: Мужской
Реальное имя: Ананий

Репутация: -  0  +


Цитата(Lapp @ 28.01.2010 20:37) *

Не страшно. smile.gif
Разбирайся, распутывайся.
Побольше экспериментируй.



У меня получилось такого вида:
program kurs2;

var
f,g:text;
n,m:string[80];
v,pos:integer;

begin
write('Vvedite vid vvoda dannyh 1 ili 2 ');
readln(v);
if v=1 then
begin
assign(f,'c:\kurs\input.txt');
reset(f);
assign(g,'c:\kurs\output.txt');
rewrite(g);
write('Vvedite nomer pozicii ');
readln(pos);
write('Vvedite vvodimye ');
readln(m);
while not Eof(f) do
begin
readln(f,n);
writeln('old=',n);
if length(n)>=pos then
insert(m,n,pos+1);
writeln(g,n);
writeln('new=',n);
end;
close(g);
close(f);
end
else if v=2 then
begin
write('Vvedite 1-iy text');
readln(f);
write('Vvedite 2-oy text');
readln(g);
write('Vvedite nomer pozicii ');
readln(pos);
write('Vvedite vvodimye ');
readln(m);
while not Eof(f) do
begin
readln(f,n);
writeln('old=',n);
if length(n)>=pos then
insert(m,n,pos+1);
writeln(g,n);
writeln('new=',n);
end;
close(g);
close(f);
end
else
writeln('Oshibka poprobuyte zanovo');

readln;
end.



Но нужно еще доработать.Прикрепленный файл  KURS02.PAS ( 1.18 килобайт ) Кол-во скачиваний: 301


Сообщение отредактировано: Lapp - 30.01.2010 0:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 30.01.2010 5:55
Сообщение #10


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


По поводу тэгов - загляни, пожалуйста, вот сюда: Помогите с программкой . И если ты и после этого не будешь обрамлять код тегами - закрою тему за нарушение правил.

И еще, я тебя очень прошу: пожалуйста, пойди в меню Options -> Environment -> Editor и там сними галку с пункта "Use Tab characters". Она мне сегодня попортила несколько литров крови..
Цитата(Earl_Ananiy @ 29.01.2010 9:13) *
Но нужно еще доработать.
Нет, боюсь, что надо переделать, и сильно..

1. Так нельзя писать программы: ты сдублировал практически весь код из-за ввода имен файлов! А теперь представь, что твоя программа производила бы сложные расчеты и ее код занимал бы много страниц - и ты бы его тоже удвоил? blink.gif Или так: тебе понадобилось внести изменения в алгоритм - что, тоже оба менять? Использование одного кода для разных случаев - это одна из главных черт программирования. Постарайся это иметь в виду в дальнейшем.

2. дальше, ты неверно делаешь ввод названий файлов. Ты пытаешься их считывать прямо в файорвую переменную, что совершенно неверно. Их надо читать в строковую переменную, а потом делать Assign, как ты сделал в другом случае. Интересно, что компилятор не смог эту твою ошибку отловить, поскольку в результате получилась допустимая по синтаксису конструкция.. smile.gif

3. Я тебе писал в прошлый раз: не надо писать директорию в имени файла. Запускай программу в той директории, где находится файл, и все будет в порядке. Если ты почему-то не можешь этого делать - так и СКАЖИ по крайней мере.. Тебе понравится, когда твои слова будут игнорировать БЕЗ ЗВУКА?
А вообще, я подозреваю, что ты запускаешь Турбо прямо в директории, где он установлен, отсюда и проблема. Это В КОРНЕ неправильно, постарайся это изжить. Давай обсудим, как именно, если хочешь. Но если я увижу, что опять та же фигня продолжается - я больше не зайду в эту тему..

4. Я подправил некоторые слова.. органически не переношу латиницу, но если уж употребляешь - ну пощади и не пиши "введите вводимые"! Страх и ужас.. (TarasBer, ау! smile.gif ты меня заразил..)

Вот тебе код, разберись и приходи:
program kurs2;
var
f,g:text;
n,m,fName,gName:string[80];
v,pos:integer;

begin
write('Vvedite vhodnoi text (input.txt, esli pusto): ');
readln(fName);
if fName='' then fName:='input.txt';
assign(f,fName);
reset(f);
write('Vvedite vyhodnoi text (output.txt, esli pusto): ');
readln(gName);
if gName='' then gName:='output.txt';
assign(g,gName);
rewrite(g);
write('Vvedite nomer pozicii: ');
readln(pos);
write('Vvedite vstavku: ');
readln(m);
while not Eof(f) do begin
readln(f,n);
writeln('old=',n);
if length(n)>=pos then insert(m,n,pos+1);
writeln(g,n);
writeln('new=',n);
end;
close(g);
close(f);
readln
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.07.2025 20:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"