![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 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. |
![]() |
![]() |
![]() |
#2 |
А может и не...
Участник клуба
Регистрация: 27.03.2010
Сообщений: 1,269
|
![]()
Ну, как я понял, тебе на "Исходниках" объяснили как сделать тримминг пробелов слева... Только я не понял зачем копировать исходный файл в выходной, а потом центрировать строки в выходном файле? Тебе же было задание из исходного файла сделать результирующий файл с отцентрированными строками, а для этого использовать динамическую структуру данных (список) с использованием указателей. Вот и создавай список строк из исходного файла, потом пробегись по списку и центрируй строки, а потом уже весь список залей в выходной файл...
![]()
Перемешивай дело с бездельем и не сойдешь с ума...
|
![]() |
![]() |
![]() |
#3 | |
Регистрация: 27.02.2010
Сообщений: 3
|
![]() Цитата:
1. Данные берутся из файла dan.inp 2. В выходном файле должны быть исходные данные + отсортированные строки. Что-то не пойму! ![]() Создаю список строк из исходного файла, потом мне нужно указатель поставить на начало (правильно? А как?) потом пробегаю по списку и центрую. Центрирование хочу сделать по такому алгоритму: Пробегаю первую строку и просчитываю количество пробелов и симвлов в строке. Потом сдвигаю. Единственно не могу разобраться с функцией Ord. Т.е мне нужно как-то определять пробел это или символ. |
|
![]() |
![]() |
![]() |
#4 |
А может и не...
Участник клуба
Регистрация: 27.03.2010
Сообщений: 1,269
|
![]()
Я бы так отцентрировал строку:
1. Сначала подсчитал количество пробелов слева 2. Определить длину строки за вычетом левых пробелов легко. 3. Исходя из того, что строка должна иметь длину в 40 символов, легко подсчитать сколько пробелов нужно добавить (слева и справа) 4. Добавляешь нужное количество пробелов слева к строке и справа к строке - получаешь центрированную строку.... Все.
Перемешивай дело с бездельем и не сойдешь с ума...
|
![]() |
![]() |
![]() |
#5 | |
Регистрация: 27.02.2010
Сообщений: 3
|
![]() Цитата:
Весь вопрос как это все реализовать в коде. Проблема еще в том, что строк как таковых у меня нет. У меня же запись из символов. Если создаю запись из строк тогда непонятно как потом строку сдвинуть. Подскажи как указатель выставить на начало? Кажется Reset....... |
|
![]() |
![]() |
![]() |
#6 | ||
А может и не...
Участник клуба
Регистрация: 27.03.2010
Сообщений: 1,269
|
![]() Цитата:
Цитата:
Контакты: e-mail: skiper@rol.ru icq: 585281783 Skype: delmas61
Перемешивай дело с бездельем и не сойдешь с ума...
|
||
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
сортировка текстового файла | 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 |