"работа с текстовыми файлами", Паскаль

Ответить
maliyusha
Сообщения: 21
Зарегистрирован: 25 дек 2008, 23:21
Контактная информация:

Задача:
Дан текстовый файл f, содержащий целые числа от 1 до 100. Подготовить новый файл для печати этих чисел в две колонки. В левой колонке должны быть размещены числа от 1 до 50, в правой колонке − числа от 51 до 100. Выровнять числа по левому краю.
Пожалуйста, подскажите как можно осуществить решение задачи и как примерно будет выглядеть код, наверняка многим встречались решения подобных задач. Спасибо :D
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

:) Задача настолько детерминированная, что хочется написать всю программу одной строкой

Код: Выделить всё

var i:byte; begin for i:=1 to 50 do writeln(i,#9,i+50); end.
Выравнивание по левому краю обеспечивает табуляция.
maliyusha
Сообщения: 21
Зарегистрирован: 25 дек 2008, 23:21
Контактная информация:

Забавно, впервые вижу программу в одну строку :) Прогресс не стоит на месте ))
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Веселиться так веселиться! Задание звучит как "Подготовить новый файл для печати этих чисел в две колонки". Так что

Код: Выделить всё

var f: text; begin assign(f, 'c:\1.txt'); rewrite(f); close(f); writeln('Файл подготовлен, можете печатать'); end.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Давайте задачу поставим иначе.

Дан файл, в котором некоторое количество коротких строк. Размер файла не ограничен (т.е. считывать его в память целиком нельзя). Сформировать новый файл, который содержит данные первого файла, но уже в 2 колоки. Колонки формируются в порядке "Сверху вниз, а потом слева направо".
(Т.е.
1
2
3
4
должно стать
1 3
2 4)
Ширину колонки определить автоматически по максимально длинному значению первой колонки + 5 пробелов. Вторую колонку пробелами до указанной ширины не дополнять.

Вот в такой формулировке это хотя бы решать интересно, притом она включает в себя и Вашу, т.е. ее решение является решением и Вашей задачи тоже.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Хотя и так ничего интересного :(

Код: Выделить всё

var
  F1a,F1b,F2:Text;
  i,N,W:longint;
  S,S2:String;

begin
  assign(F1a,'100.txt');
  assign(F1b,'100.txt');
  N:=0;
  reset(F1a);
  while not eof(F1a) do begin
    readln(F1a,S); inc(N);
  end;
  N:=(N+1) div 2;

  reset(F1b);
  W:=0;
  for i:=1 to N do begin
    readln(F1b,S);
    if length(S)>W then W:=length(S);
  end;

  reset(F1a);

  assign(F2,'100-2.txt');
  rewrite(F2);
  for i:=1 to N do begin
    readln(F1a,S);
    if not eof(F1b) then readln(F1b,S2) else S2:='';
    writeln(F2,S,'':W+5-length(S),S2);
  end;
  close(F1a);
  close(F1b);
  close(F2);
end.

maliyusha
Сообщения: 21
Зарегистрирован: 25 дек 2008, 23:21
Контактная информация:

Почему ничего интересного? К примеру, я только учусь программировать на Паскале и для меня все в новинку,а всё новое- всегда интересное. И спасибо за помощь :)
Ответить