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

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

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

> Задача с решением и обьяснениями., В файле содержится последовательность слов, разделенных пробелом. Текс
GrukhvinEV
сообщение 20.12.2011 12:49
Сообщение #1


Новичок
*

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

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


Выкладываю решение задачи с пояснениями, мб кому пригодится.
В файле содержится последовательность слов, разделенных пробелом. Текст заканчивается точкой. Вывести в новый файл все слова, отличные от последнего слова.

Program Lab_3; {Имя программы}
uses crt; {Команда подключения модулей}
const {Секция объявления констант}
filename1='a.txt';{Присваиваем константе filename1 имя файла, a.txt}
filename2='b.txt'; {Присваиваем константе filename2 имя файла, b.txt}
var {Секция объявления переменных}
f:text; {Переменная для объявления текстового файла}
s,last:string; {Переменная типа строка}
p,o:byte;{Переменная типа byte, переменная типа byte может принимать значения от 0 до 255}
begin
assign(f,filename1);{Связываем файловую переменную f с конкретным именем внешнего файла 'filename1'}
reset(f); {Открываем существующий файл с которым мы связали переменную f}
s:=''; {Присваиваем переменной строки s пустое значение}
repeat {Выполняем оператор после repeat до тех пор пока не выполнится условие заданное после оператора until}
inc(byte(s[0]));{ Увеличиваем значение кода символа s[0] на 1, т.к. s[0] имеет пустое значение, то к пустому значению прибавляем 1}
read(f,s[byte(s[0])]);{Считываем текст из файловой переменной f в переменную s }
until s[byte(s[0])]='.';{Условие выхода из цикла оператора repeat: переменная s[byte(s[0])] равна '.'}
dec(byte(s[0]));{ Уменьшаем кода символа s[0] на 1, т.е. после выполнения цикла организованного оператором repeat код символа s[0] будет равняться количеству символов в файле, а оператор dec уменьшит это значение на 1}
writeln('Строка файла: ',s); {Выводим текст 'Строка файла: s' , где s переменная строки, которая хранит считанную с файла информацию}
close(f);{Закрываем ранее открытый файл f}
for p:=length(s) downto 1 do {Для всех p от length(s) до 1 выполняется оператор после do, где length(s) – количество символов переменной s}
if s[p]=' ' {Если переменная s[p] равна пробелу, то выполняем оператор после then}
then
begin
last:=copy(s,p+1,255);{Присваиваем переменной строки last значение извлеченное из переменной s начиная с символа p+1 до 255, т.е считываем с переменной s в переменную last последнее слово}
break;{Принудительно завершаем цикл, т.к. нет смысла выполнять цикл полностью если мы дошли до конечного значения переменной s}
end;
assign(f,filename2); {Связываем файловую переменную f с конкретным именем внешнего файла 'filename2'}
rewrite(f); {Открываем файл f в режиме записи. Если указанный файл отсутствует на диске, то он будет создан. Если файл существует и содержит данные, то все они будут удалены и заменены в дальнейшем новыми (перезаписаны)}
writeln('Последнее слово: ',last); {Выводим текст 'Последнее слово: last' , где last переменная строки, которая хранит последнее слово файла}
o:=1;{Переменной о присваиваем значение 1, о – переменная с которой будем начинать извлечение слова из переменной s}
for p:=1 to p do {Для p от 1 до p выполняем оператор после do}
if s[p]=' ' {Если переменная s[p] равна пробелу, то выполняем оператор после then}
then
begin
if copy(s,o,p-o)<>last {Если извлеченное значение из переменой s от o до o-p не равно значению переменной last, то выполняется оператор после then, т.е сравниваем извлеченное слово с последним словом и если слова не равны то переходим к выполнению оператора после then}
then writeln(f,copy(s,o,p-o)); {Записываем в файл f значение извлеченное из переменной s от о до p-о, т.е. извлеченное слово}
o:=p+1;{Присваиваем переменной о значение переменной p+1, т.е. задаем номер символа с которого будет начинаться извлечение из переменной s}
end;
close(f); {Закрываем ранее открытый файл f}
readln{Ожидание нажатия клавиши Enter}
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
GrukhvinEV
сообщение 20.12.2011 13:33
Сообщение #2


Новичок
*

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

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


Ну вообще по скольку у меня это 3 программа по счету, то с самого нуля было тяжко разбираться как это все работает, вот ушел весь день. Были бы все задачи так расписаны было бы проще разбираться начаинающим, типа меня. А то задаешь вопрос на какую нибудь задачу и фиг кто ответит. И если ты такой умный, то коменти пожалуйста только то что не верно описано.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



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