Разработать блок-схему алгоритма и составить программу обработки текстовых данных, хранящихся в произвольном файле на магнитном диске. Вид обработки данных ‴Включение в каждую строку заданной последовательности символов после символа с заданным номером‴. Текстовые данные, подлежащие обработке, заносятся в файл с помощью редактора текста. В программе предусмотреть ввод с терминала имен входного и выходного (в случае необходимости) файлов, вывод на печать входного и выходного файлов. Предусмотреть запись выходного файла на диск. Длина строки файла не должна превышать 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)
Lapp
28.01.2010 10:06
Вот, как-то так.. Комменты по тексту.
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 используется для нового файла - это грубая ошибка!
Earl_Ananiy
28.01.2010 23:33
Цитата
Разбирайся, задавай вопросы. Пожалуйста, обрати внимание на форматирование кода - оно тебе очень поможет в будущем.
Что сделать для обработки, при введении текста с экрана.
тут я применил тэги цитаты и цвета. Нажми "Изменить - полное редактирование" - и увидишь, как. Lapp
Lapp
28.01.2010 23:41
Цитата(Earl_Ananiy @ 28.01.2010 19:33)
Что сделать для обработки, при введении текста с экрана.
Неясно, что ты имеешь в виду. Можешь сказать поподробнее? Вместо входного файла - ввод с клавы? да? Немного побольше слов, пожалуйста..
И, пожалуйста, используй тэги. Для кода - code, для цитаты - quote, и т.п. Видишь разные кнопочки над формой ввода? Они обрамляют выделенный текст тэгами. Выдели текст мышкой и нажми, например, B. А потом нажми кнопку предпросмотра (она внизу). Поэкспериментируй.
Earl_Ananiy
28.01.2010 23:52
Цитата(Lapp @ 28.01.2010 19:41)
Неясно, что ты имеешь в виду. Можешь сказать поподробнее? Вместо входного файла - ввод с клавы? да? Немного побольше слов, пожалуйста.. И, пожалуйста, используй тэги. Для кода - code, для цитаты - quote, и т.п. Видишь разные кнопочки над формой ввода? Они обрамляют выделенный текст тэгами. Выдели текст мышкой и нажми, например, B. А потом нажми кнопку предпросмотра (она внизу). Поэкспериментируй.
Код
Для ввода с клавиатуры.
Lapp
29.01.2010 0:18
Цитата(Earl_Ananiy @ 28.01.2010 19:52)
Код
Для ввода с клавиатуры.
Граф, сделай еще попытку. Эта много понимания не добавила..
P.S. Тэги кода - для САМОГО кода: Паскаль, Си.. Выбери в меню нужный пункт.
Earl_Ananiy
29.01.2010 0:25
Цитата(Lapp @ 28.01.2010 20:18)
Граф, сделай еще попытку. Эта много понимания не добавила..
P.S. Тэги кода - для САМОГО кода: Паскаль, Си.. Выбери в меню нужный пункт.
Что то я сам запутался.
Lapp
29.01.2010 0:37
Цитата(Earl_Ananiy @ 28.01.2010 20:25)
Что то я сам запутался.
Не страшно. Разбирайся, распутывайся. Побольше экспериментируй.
Earl_Ananiy
29.01.2010 13:13
Цитата(Lapp @ 28.01.2010 20:37)
Не страшно. Разбирайся, распутывайся. Побольше экспериментируй.
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');
По поводу тэгов - загляни, пожалуйста, вот сюда: Помогите с программкой . И если ты и после этого не будешь обрамлять код тегами - закрою тему за нарушение правил.
И еще, я тебя очень прошу: пожалуйста, пойди в меню Options -> Environment -> Editor и там сними галку с пункта "Use Tab characters". Она мне сегодня попортила несколько литров крови..
Цитата(Earl_Ananiy @ 29.01.2010 9:13)
Но нужно еще доработать.
Нет, боюсь, что надо переделать, и сильно..
1. Так нельзя писать программы: ты сдублировал практически весь код из-за ввода имен файлов! А теперь представь, что твоя программа производила бы сложные расчеты и ее код занимал бы много страниц - и ты бы его тоже удвоил? Или так: тебе понадобилось внести изменения в алгоритм - что, тоже оба менять? Использование одного кода для разных случаев - это одна из главных черт программирования. Постарайся это иметь в виду в дальнейшем.
2. дальше, ты неверно делаешь ввод названий файлов. Ты пытаешься их считывать прямо в файорвую переменную, что совершенно неверно. Их надо читать в строковую переменную, а потом делать Assign, как ты сделал в другом случае. Интересно, что компилятор не смог эту твою ошибку отловить, поскольку в результате получилась допустимая по синтаксису конструкция..
3. Я тебе писал в прошлый раз: не надо писать директорию в имени файла. Запускай программу в той директории, где находится файл, и все будет в порядке. Если ты почему-то не можешь этого делать - так и СКАЖИ по крайней мере.. Тебе понравится, когда твои слова будут игнорировать БЕЗ ЗВУКА? А вообще, я подозреваю, что ты запускаешь Турбо прямо в директории, где он установлен, отсюда и проблема. Это В КОРНЕ неправильно, постарайся это изжить. Давай обсудим, как именно, если хочешь. Но если я увижу, что опять та же фигня продолжается - я больше не зайду в эту тему..
4. Я подправил некоторые слова.. органически не переношу латиницу, но если уж употребляешь - ну пощади и не пиши "введите вводимые"! Страх и ужас.. (TarasBer, ау! ты меня заразил..)
Вот тебе код, разберись и приходи:
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.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.