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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2012, 19:06   #1
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию Створити файл цілих чисел. У новому файлі дві останні компоненти переставити на початок файлу.

Не могу понять как правильно стать на позицию компоненты, кому не сложно исправьте. За ранее благодарен
Создать файл целых чисел. В новом файле две последние компоненты переставить на начало файла.
Код:
var
   F,P : file of integer;
   n,m,i,a,b : integer;
begin
     assign(F,'Dan.dat');
     rewrite(F);
     writeln('Ââåäèòå êîëè÷åñòâî êîìïîíåíòîâ ôàëà');
     readln(n);
     writeln('Ââåäèòå êîìïîíåíòû ôàéëà');
     For i:=1 to n do
        begin
             readln(m);
             write(F,m);
        end;
     writeln('Ïîëó÷åíûé ôàéë');
     reset(F);
     while not eof(F) do
          begin
               read(F,m);
               writeln(m:4);
          end;
     assign(P,'Dota.dat');
     rewrite(P);
     reset(F);
     seek(F,FilePos(F)-1);
     seek(F,a);
     write(P,a);
     seek(F,FilePos(F)-2);
     seek(F,b);
     write(P,b);
     For i:=1 to n-2 do
        begin
             readln(m);
             write(P,m);
        end;
     writeln('Ïîëó÷åíûé ôàéë');
     reset(P);
     while not eof(P) do
          begin
               read(P,m);
               writeln(m:4);
          end;
          close(F);
          close(P);
          writeln;
end.

Последний раз редактировалось Liinad; 08.12.2012 в 01:40.
Liinad вне форума Ответить с цитированием
Старый 08.12.2012, 01:05   #2
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Люди подскажите, как правильно написать
Liinad вне форума Ответить с цитированием
Старый 08.12.2012, 01:29   #3
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
reset(F);
seek(F,FilePos(F)-1);
А с чего вы решили, что после выполнения процедуры reset, порядковый номер текущего компонента в файле будет последним ?
Рекомендовал бы все-таки, после выполнения ряда действий по записи в файл или чтению из сего, закрывать его.
И еще, не совсем понятно, что именно вы подразумевали под этими строчками:
Код:
  seek(F,a);
  seek(F,b);
У вас эти переменные не инициализированы - по умолчанию их значение равно нулю. Имейте это ввиду Т.е получается, вы в любом случае, перед записью в файл P оказываетесь на нулевой позиции файла F. И записываете вы в файл P (зачем-то) значения этих самых переменных a и b даже не обращавшись к компонентам файла F.

P.S. Оставляйте пожалуйста условие задания на русском языке, не все знакомы с украинским.

Последний раз редактировалось Базиля; 08.12.2012 в 01:34.
Базиля вне форума Ответить с цитированием
Старый 08.12.2012, 01:37   #4
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
И еще, не совсем понятно, что именно вы подразумевали под этими строчками:
Код:
  seek(F,a);
  seek(F,b);
Я хотел в эти переменные записать последнюю и предпоследнюю компоненты файла, а потом их записать на начало файла P. Я прочитал пару статеек про перемещение компонент по файлу, но я так и не понял как именно обратиться к последней компоненте и предпоследней. А потом тем более записать их на начало другого файла

Цитата:
А с чего вы решили, что после выполнения процедуры reset, порядковый номер текущего компонента в файле будет последним ?
Тут я не прав, кстати, после оператора Reset, позиция будет в начале файла.

Базилия, можете подсказать, как через seek(), правильно обратиться к компоненте файла?

Последний раз редактировалось Stilet; 08.12.2012 в 10:48.
Liinad вне форума Ответить с цитированием
Старый 08.12.2012, 01:46   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Есть функция filesize которая возвращает количество компонент в файле.
Воспользуйтесь ею для обращения к последнему компоненту файла, ну и предпоследнему соответственно.
Вот пример обращения к последнему компоненту:
Код:
seek(F,Filesize(f)-1);  //не забываем что нумерация начинается с нуля
Ну а дальше уже считываем:
Код:
Read(f,a);
Базиля вне форума Ответить с цитированием
Старый 08.12.2012, 01:49   #6
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Получается я перепутал операторы
Код:
 seek(F,Filesize(f)-1);
с
Код:
seek(F,FilePos(F)-1);
, спасибо, за помощь, сейчас буду разбираться дальше, по моему задание элементарное )
Liinad вне форума Ответить с цитированием
Старый 08.12.2012, 01:51   #7
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Только не операторы, а функции
Базиля вне форума Ответить с цитированием
Старый 08.12.2012, 01:52   #8
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Точно, спасибо за поправку
Liinad вне форума Ответить с цитированием
Старый 08.12.2012, 01:53   #9
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

На здоровье!
Базиля вне форума Ответить с цитированием
Старый 08.12.2012, 16:30   #10
Liinad
Пользователь
 
Регистрация: 09.11.2012
Сообщений: 29
По умолчанию

Вчера пробовал изменить программу, почему-то не выводит, вот что получилось, подскажите что не правильно?
Код:
var
   F,P : file of integer;
   n,m,i,a,b : integer;
begin
     assign(F,'Dan.dat');
     rewrite(F);
     writeln('Ââåäèòå êîëè÷åñòâî êîìïîíåíòîâ ôàëà');
     readln(n);
     writeln('Ââåäèòå êîìïîíåíòû ôàéëà');
     For i:=1 to n do
        begin
             readln(m);
             write(F,m);
        end;
     writeln('Ïîëó÷åíûé ôàéë');
     reset(F);
     while not eof(F) do
          begin
               read(F,m);
               writeln(m:4);
          end;
          close(F);
     reset(F);
     assign(P,'Dota.dat');
     rewrite(P);
     seek(F,FileSize(F)-1);
     read(F,a);
     write(P,a);
     seek(F,FileSize(F)-2);
     read(F,b);
     write(P,b);
     For i:=1 to n-2 do
        begin
             readln(m);
             write(P,m);
        end;
     writeln('Ïîëó÷åíûé ôàéë');
     reset(P);
     while not eof(P) do
          begin
               read(P,m);
               writeln(m:4);
          end;
          close(F);
          close(P);
          writeln;
end.
Liinad вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Створити файл цілих чисел.Створити новий файл,який містить цілі числа з першого файлу у шістнадцятирічному вигляді. Саша513 Паскаль, Turbo Pascal, PascalABC.NET 0 16.05.2012 18:52
Дан файл вещественных чисел. Создать файл целых чисел, содержащий номера всех локальных максимумов в порядке возрастания zzz6 Помощь студентам 1 04.07.2011 12:59
Подключить js файл к js файлу Ozerich JavaScript, Ajax 1 05.08.2009 09:50
Початок xTANATOSx Общие вопросы C/C++ 6 21.10.2007 14:24