20.11.2019, 22:11 [+3 UTC]
в нашей команде: 3 984 чел. | участники онлайн: 3 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.78 (18.11.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
16.11.2019, 20:23

Последний вопрос:
20.11.2019, 14:55
Всего: 151022

Последний ответ:
20.11.2019, 15:35
Всего: 259434

Последняя рассылка:
20.11.2019, 16:45

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
19.01.2011, 11:00 »
lamed
Отлично! Таки подойдет:) Большое спасибо. [вопрос № 181937, ответ № 265509]

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

Gluck
Статус: 7-й класс
Рейтинг: 802
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 616
puporev
Статус: Профессионал
Рейтинг: 372

Перейти к консультации №:
 

Консультация онлайн # 197035
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: IvanDorohov (Посетитель)
Отправлена: 10.11.2019, 18:23
Поступило ответов: 1

Здравствуйте! (PascalABC) У меня возникли сложности с написанием данной программы: Напечатать в обратном порядке элементы вещественного файла до элемента, номер которого равен значению серединного элемента другого целочисленного файла. Количество элементов в каждом файле неизвестно. У меня есть наработки

Приложение:

Состояние: Консультация закрыта

Ответ # 279085 от puporev (Профессионал)

Здравствуйте, IvanDorohov!
Предлагаю такой вариант.

Код (Pascal) :: выделить код
var f:file of real;
    g:file of integer;
    x,y:real;
    a,b,c,n,i,j:integer;
begin
//создадим файлы с неизвестным количеством элементов
//вещественный
assign(f,'fileF');
rewrite(f);
writeln('Вводите в файл вещественные числа, окончание ввода 0');
repeat
readln(x);
if x<>0 then write(f,x);
until x=0;
//целый
assign(g,'fileG');
rewrite(g);
writeln('Вводите в файл целые числа, окончание ввода 0');
repeat
readln(a);
if a<>0 then write(g,a);
until a=0;
writeln('Содержание исходного файла вещественных чисел');
reset(f);
while not eof(f) do
 begin
  read(f,x);
  write(x,' ');
 end;
writeln;
writeln('Содержание исходного файла целых чисел');
reset(g);
while not eof(g) do
 begin
  read(g,a);
  write(a,' ');
 end;
writeln;
//сортировка файла целых чисел для поиска срединного элемента(медианы)
reset(g);
for i:=0 to filesize(g)-2 do
for j:=i+1 to filesize(g)-1 do
  begin
    seek(g,i);
    read(g,a);
    seek(g,j);
    read(g,b);
    if a>b then
      begin
       seek(g,i);
       write(g,b);
       seek(g,j);
       write(g,a);
      end;
   end;
writeln('Содержание отсортированого файла целых чисел');
reset(g);
while not eof(g) do
 begin
  read(g,a);
  write(a,' ');
 end;
writeln;
reset(g);
c:=filesize(g)div 2;
if odd(filesize(g))then //если размер файла нечетный
 begin
  seek(g,c); //медиана равна среднему элементу
  read(g,n);
 end
else //иначе
 begin
  seek(g,c);
  read(g,a);
  seek(g,c-1);
  read(g,b);
  n:=(a+b) div 2;//медиана равна полусумме двух центральных
 end;
writeln('Значение срединного элемента=',n);
close(g);
//печатаем в обратном порядке элеметы после n
reset(f);
if filesize(f)<n-1 then write('В файле вещественных чисел не хватает чисел для печати')
else
 begin
   writeln('Элементы файла вещественных чисел с конца до номера ',n);
   for i:=filesize(f)-1 downto n-1 do
    begin
     seek(f,i);
     read(f,x);
     write(x,' ');
    end;
  end;
close(f);
end.


Консультировал: puporev (Профессионал)
Дата отправки: 11.11.2019, 09:51

5
Спасибо большое, посмотрю вечером на пк
-----
Дата оценки: 11.11.2019, 12:33

Рейтинг ответа:

+1

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 197035
puporev
Профессионал

ID: 401888

# 1

 +1 
 
= общий = | 10.11.2019, 19:12 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
IvanDorohov:

Нужно

© Цитата:
номер которого равен значению серединного элемента

Но номер это целое число, а значение элемента вещественное число. Как быть?

IvanDorohov
Посетитель

ID: 403344

# 2

= общий = | 10.11.2019, 19:15 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: puporev
я не знаю, извините. Препод дал задание и исчез в неизвестном направлении до сдачи лабы

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 3

 -1 
 
= общий = | 10.11.2019, 19:21 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
IvanDorohov:

© Цитата: IvanDorohov
Количество элементов в каждом файле неизвестно

Как, а N=10000;, т.е. неизвестность у Вас заканчивается на 10'000. Я думал неизвестно = бесконечность.

Читаете хелп:
© Цитата:
FileSize(f) функция = возвращает количество элементов в типизированном файле

© Цитата:
Seek(f,n) процедура = перемещает файловый указатель в типизированном файле на n-тый элемент (нумерация начинается с нуля)

Т.е. прочитали количество, нашли средину, прочитали значание.
Ну а дальше по аналогии.
smile

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

IvanDorohov
Посетитель

ID: 403344

# 4

 +1 
 
= общий = | 10.11.2019, 19:39 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
Зенченко Константин Николаевич:

промахнулся в лайках, извините, на сайте недавно. Вопрос: при пробеге по программе выходит ошибка на строке в var p: ^celmas; . Ошибка: Указатели на ссылочные типы недопустимы. Посмотрел в пособиях, вроде всё должно быть нормально. Как бороться с этой ошибкой?

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 5

= общий = | 10.11.2019, 20:47 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

АВС - учебная программа.
В первых паскалях было program(input,output) и там допускалось input^ читать, ещё до чтения как такового.
То, что в нормальном пасале проходит на ура, в АВС ="попытка разименовать указатель".
smile

Прочитайте моё сообщение(выше) ещё раз и Вы найдете решение без указателей и динамической памяти.

© Цитата: IvanDorohov
промахнулся в лайках,

smile
Я на это уже давно не обращаю внимание. Тем более мою подпись читали:
© Цитата: Зенченко Константин Николаевич
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

smile

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

puporev
Профессионал

ID: 401888

# 6

= общий = | 11.11.2019, 08:08 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
IvanDorohov:

Извиняюсь, невнимательно прочитал условие

© Цитата:
серединного элемента другого целочисленного файла.

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.20690 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.78 от 18.11.2019
Версия JS: 1.34 | Версия CSS: 3.35