Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2010, 14:56   #1
Dimon128500
 
Регистрация: 27.02.2010
Сообщений: 3
По умолчанию Центрирование строк текстового файла

Задача на Паскале Центрирование строк
Нужна помощь в решении задачи на Паскале.

Разработать процедуру “центрирования” строк заданного текстового файла , каждая из которых имеет длину L<=40 символов и строки имеют разное число пробелов слева.
В выходной файл вывести строки исходного файла и файла, полученного в результате “центрирования” ,т.е. расположения в центре экрана независимо от длины строки.

Как сделать эту задачу с использованием динамических переменных, указателей?

По заданию нужно сначала скопировать исходные данные из файла dan.inp в файл res.out (что у меня работает),
затем ниже в этот же файл (res.out) вставить центрированные строки (не получается). Была задумка сделать процедуру аналогичную Сopy1 еще раз, чтобы она выводила в res.out уже центрированные строки. Однако удалось добиться только вывода последней строки. Я так понимаю мне нужно указатель снова выставить на начало? В тексте ниже этой процедуры нет.

Вот что у меня получилось:

program zadanie2;
uses Crt;
type
next=^zap;
zap=record
simvol:char;
sled:next;
end;
var
ukstr,ukstr2,ukzv,ukzv2:next;
Nprobelov,Nsimvolov:integer;
{Процедура копирования}
procedure copy1 (var ukstr:next);
var
ukzv:next;
begin
new(ukzv);
ukstr:=ukzv;
read(ukzv^.simvol);
ukzv^.sled:=nil;
while not eoln do
Begin
new(ukzv^.sled);
ukzv:=ukzv^.sled;
read(ukzv^.simvol);
ukzv^.sled:=nil;
end;
ukzv:=ukstr;
while ukzv<>nil do
Begin
write(ukzv^.simvol);
ukzv:=ukzv^.sled;
end;
while not eof do
Copy1(ukstr);
end;
{Головная программа}
Begin
assign(input,'dan.inp');
reset(input);
assign(output,'res.out');
rewrite(output);
writeln('========================== ======');
writeln('Исходные строки');
writeln('========================== ======');
Copy1(ukstr);
writeln;
writeln('========================== ======');
writeln('Центрированные строки');
writeln('========================== ======');
close(input);
close(output);
End.
Dimon128500 вне форума Ответить с цитированием
Старый 10.04.2010, 15:08   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Ну, как я понял, тебе на "Исходниках" объяснили как сделать тримминг пробелов слева... Только я не понял зачем копировать исходный файл в выходной, а потом центрировать строки в выходном файле? Тебе же было задание из исходного файла сделать результирующий файл с отцентрированными строками, а для этого использовать динамическую структуру данных (список) с использованием указателей. Вот и создавай список строк из исходного файла, потом пробегись по списку и центрируй строки, а потом уже весь список залей в выходной файл...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 10.04.2010, 15:18   #3
Dimon128500
 
Регистрация: 27.02.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Grag Посмотреть сообщение
Ну, как я понял, тебе на "Исходниках" объяснили как сделать тримминг пробелов слева... Только я не понял зачем копировать исходный файл в выходной, а потом центрировать строки в выходном файле? Тебе же было задание из исходного файла сделать результирующий файл с отцентрированными строками, а для этого использовать динамическую структуру данных (список) с использованием указателей. Вот и создавай список строк из исходного файла, потом пробегись по списку и центрируй строки, а потом уже весь список залей в выходной файл...
По условию задачи:
1. Данные берутся из файла dan.inp
2. В выходном файле должны быть исходные данные + отсортированные строки.

Что-то не пойму!
Создаю список строк из исходного файла, потом мне нужно указатель поставить на начало (правильно? А как?) потом пробегаю по списку и центрую.
Центрирование хочу сделать по такому алгоритму:
Пробегаю первую строку и просчитываю количество пробелов и симвлов в строке. Потом сдвигаю. Единственно не могу разобраться с функцией Ord. Т.е мне нужно как-то определять пробел это или символ.
Dimon128500 вне форума Ответить с цитированием
Старый 10.04.2010, 15:30   #4
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Я бы так отцентрировал строку:
1. Сначала подсчитал количество пробелов слева
2. Определить длину строки за вычетом левых пробелов легко.
3. Исходя из того, что строка должна иметь длину в 40 символов, легко подсчитать сколько пробелов нужно добавить (слева и справа)
4. Добавляешь нужное количество пробелов слева к строке и справа к строке - получаешь центрированную строку....
Все.
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 10.04.2010, 15:58   #5
Dimon128500
 
Регистрация: 27.02.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Grag Посмотреть сообщение
Я бы так отцентрировал строку:
1. Сначала подсчитал количество пробелов слева
2. Определить длину строки за вычетом левых пробелов легко.
3. Исходя из того, что строка должна иметь длину в 40 символов, легко подсчитать сколько пробелов нужно добавить (слева и справа)
4. Добавляешь нужное количество пробелов слева к строке и справа к строке - получаешь центрированную строку....
Все.
Алгоритм центрирования строки понятен.
Весь вопрос как это все реализовать в коде.
Проблема еще в том, что строк как таковых у меня нет.
У меня же запись из символов.
Если создаю запись из строк тогда непонятно как потом строку сдвинуть.
Подскажи как указатель выставить на начало?
Кажется Reset.......
Dimon128500 вне форума Ответить с цитированием
Старый 11.04.2010, 06:11   #6
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от Dimon128500 Посмотреть сообщение
Проблема еще в том, что строк как таковых у меня нет.
У меня же запись из символов.
А как же вот это условие задачи?
Цитата:
Разработать процедуру “центрирования” строк заданного текстового файла , каждая из которых имеет длину L<=40 символов и строки имеют разное число пробелов слева.
Если есть проблемы с реализацией, связывайся, договоримся...
Контакты:
e-mail: skiper@rol.ru
icq: 585281783
Skype: delmas61
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка текстового файла donvigo Общие вопросы C/C++ 2 01.04.2010 15:59
Замена текстового файла Artishok Общие вопросы Delphi 27 26.10.2009 14:47
считывание с текстового файла ciaonataha Помощь студентам 0 20.04.2009 12:09
Кодирование текстового файла milate Паскаль, Turbo Pascal, PascalABC.NET 2 24.03.2009 13:00