Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на файл и еще...
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
UnSpi
Пожалуйста помогите рещить такую задачу!!!!!! :molitva:
Реально ,вопрос жизни и смерти!!!!!!
Вот условие:
В текстовый файл занесена строка длиной более 255 символов (в строке может быть только одно слово). Вывести на экран строку, удалив повторяющие «лишние» пробелы, если они есть, и во всех словах перенести последнюю букву в начало слова.
заранее спасибо!!!
volvo
Задание уточните... Здесь есть противоречие:
Цитата(UnSpi @ 28.05.05 13:53)
В текстовый файл занесена строка длиной  более 255 символов (в строке может быть только одно слово). Вывести на экран строку, удалив повторяющие «лишние» пробелы, если они есть, и во всех словах перенести последнюю букву в начало слова.

Сколько строк занесено в файл? Если одна, и в одной строке - одно слово, то что значит "во всех словах перенести..."
UnSpi
Уточняю,
в строке содержится много слов,написанных через один и более пробелов(а строка
состоит из более чем 255 символов).
потом на экран вывести эту же строку,но только чтобы слова были написаны через
ОДИН пробел ,и в каждом слове перенести последнюю букву в начало слова.
volvo
Тогда вот так:
var
ch: char;
s: string;
f: text;
begin
assign(f, 'my.txt');
reset(f);
while not seekeof(f) do begin

repeat
read(f, ch);
until ch <> #32;

s := ch;

repeat
read(f, ch);
if ch <> #32
then s := s + ch;
until (ch = #32) or (eof(f));
s := s[length(s)] + copy(s, 1, pred(length(s)));
write(s, ' ');

end;
end.
UnSpi
большое спасибо!!!!!!все понятно!!!!
можно теперь такой вопрос:
как вывести в этой задаче сначала исходный текст,а затем уже переработанный,
и еще как изменится программа,если в данной строке нужно удалить повторяющие «лишние» пробелы, если они есть, и если слово нечетной длины, удалить среднюю букву в каждом слове??????
volvo
Цитата(UnSpi @ 28.05.05 17:19)
как вывести в этой задаче сначала исходный текст, а затем уже переработанный

while not eof(f) do begin
read(f, ch); write(ch);
end;
reset(f);
{ и потом уже делать по алгоритму }

Цитата(UnSpi @ 28.05.05 17:19)
как изменится программа, если в данной строке нужно удалить повторяющие «лишние» пробелы, если они есть

это не нужно добавлять - оно уже есть. Этим занимается вот этот фрагмент:
    repeat
read(f, ch);
until ch <> #32;


Цитата(UnSpi @ 28.05.05 17:19)
и если слово нечетной длины, удалить среднюю букву в каждом слове??????

вместо
s := s[length(s)] + copy(s, 1, pred(length(s)));

делать
if odd(length(s)) then
delete(s, succ(length(s) div 2), 1);
UnSpi
спасибо!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! smile.gif
А моно еще такую задачку решить:

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

2).Задан файл, содержащий текст программы на языке высокого уровня. Создать процедуру, позволяющую подсчитать количество памяти, которое будет выделено в сегменте данных для всех данных программы перечисляемого типа.
volvo
Это не так просто как ты думаешь. Попробуй, например, навскидку сказать, сколько данных вещественного типа будет в таком случае:
type
float = double;
f_array = array[1 .. 10] of float;
var
a, b, c: real; d, e, f: float;
const
x: f_array = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

Заметь, это - Паскаль... Я не говорю про другие языки...
UnSpi
Да,я понимаю!!!
просто у меня есть прога ,которая подсчитывает количество памяти, которое будет выделено в сегменте данных для всех данных программы стандартных типов.
но вот в чем проблема:Я В НЕЕ ВЪЕХАТЬ НЕ МОГУ!!!! :fire:
Но тебе я все равно благодарен!!!!!!!!!!!!!!!!! :thanks:
UnSpi
Вот та задача:
program file5;
uses crt; {strings}
procedure Memory(var f:text);
var x :char;
flag :byte;
stop :boolean;
ChType :string;
Memtype,Totalmem :integer;
begin
stop:=true;
Totalmem:=0;
while stop do
begin
read(f,x);
flag:=1;
if x='b' then begin
read(f,x);
if x='e' then begin
read(f,x);
if x='g' then begin {begin}
read(f,x);
if x='i' then begin
read(f,x);
if x='n' then begin writeln('razmer pamyati dlya dannih=0');
halt;
end;
end;
end;
end;
end;

if x='v' then begin
read(f,x);
if x='a' then begin {var}
read(f,x);
if x='r' then repeat
read(f,x);
if x='b' then begin
read(f,x);
if x='e' then begin
read(f,x);
if x='g' then begin {begin}
read(f,x);
if x='i' then begin
read(f,x);
if x='n' then begin stop:=false;
end;
end;
end;
end;
end;
if x=',' then inc(flag);
if x=':' then begin
ChType:='';
read(f,x);
while x<>';'do begin
Chtype:=Chtype+x;
read(f,x);
end;
{ case ChType of
'byte' :Memtype:=1;
shortint:Memtype:=1;
word :Memtype:=2;
integer :Memtype:=2;
longint :Memtype:=4;
real :Memtype:=6;
double :Memtype:=8;
extended:Memtype:=10;
comp :Memtype:=8
single :Memtype:=4;
char :Memtype:=1;
string :Memtype:=256;
pchar :Memtype:=4;
pointer :Memtype:=4;
boolean :Memtype:=1;
bytebool:Memtype:=2;
wordbool:Memtype:=2;
longbool:Memtype:=4;}
if Chtype='byte' then Memtype:=1;
if Chtype='shortint' then Memtype:=1;
if Chtype='word' then Memtype:=2;
if Chtype='integer' then Memtype:=2;
if Chtype='longint' then Memtype:=4;
if Chtype='real' then Memtype:=6;
if Chtype='double' then Memtype:=8;
if Chtype='extended' then Memtype:=10;
if Chtype='comp' then Memtype:=8;
if Chtype='single' then Memtype:=4;
if Chtype='char' then Memtype:=1;
if Chtype='string' then Memtype:=256;
if Chtype='pchar' then Memtype:=4;
if Chtype='pointer' then Memtype:=4;
if Chtype='boolean' then Memtype:=1;
if Chtype='bytebool' then Memtype:=2;
if Chtype='wordbool' then Memtype:=2;
if Chtype='longbool' then Memtype:=4;
Totalmem:=Totalmem+flag*Memtype;
flag:=1;
end;

until not stop;
end;
end;
end;
writeln('the size of memory for data:',Totalmem);
end;
var
fp :text;
begin
ClrScr;
assign(fp,'FILE.TXT');
{$I+}
reset(fp);
{$I-}
if IOResult <> 0 then BEGIN writeln('FILE NOT FOUND');
halt;
END
else Memory(fp);
readkey;
end.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.