Вопрос № 183433: Среда програмирования Borland Pascal. Комментарии более чем желательны. Здравствуйте! Прошу помощи в следующем вопросе: Последовательность целых чисел заносится в файл. Прочитать из файла последовательность и записать в память в виде л...
Вопрос № 183433:
Среда програмирования Borland Pascal. Комментарии более чем желательны.
Здравствуйте! Прошу помощи в следующем вопросе:
Последовательность целых чисел заносится в файл. Прочитать из файла последовательность и записать в память в виде линейного списка. Найти сумму элементов списка с конца и с начала списка. Проверить решение на произвольном количестве последовательностей. Вывести на экран последовательность и результаты вычислений.
Отвечает Boriss (Академик) :
Здравствуйте, Посетитель - 376401! В прикрепленном файле решение Вашей задачи. Такое, как описано в Ваших разъяснениях Если что, спрашивайте
Код :
CONST
TheFileName = 'p183433.dat';
rand_range = 100;
rand_offs = -50;
TYPE
POne = ^TOne;
TOne = record
next: POne;
val : Integer;
end;
procedure Add(var R: POne; v: Integer);
{Добавляет в конец списка}
var P, Q: POne;
begin
if R = nil then begin
New(R);
R^.next := nil;
R^.val := v
end
else begin
{Ищем конец по признаку next = nil}
Q := R;
while Q^.next <> nil do
Q := Q^.next;
New(P);
Q^.next := P;
P^.next := nil;
P^.val := v
end
end;
function GetMaxElement(R: POne): Integer;
var k: Integer;
begin
GetMaxElement := 0; if R = nil then Exit;
k := 0; while R <> nil do begin inc(k); R := R^.next end;
GetMaxElement := k
end;
function GetElement(R: POne; RecNo: Integer): Integer;
{Начинаем с 1}
var k: Integer;
begin
if R = nil then begin GetElement := 0; Exit end;
if (RecNo < 1) or (RecNo > GetMaxElement(R)) then begin
Writeln('Неправильный номер элемента: ', RecNo);
GetElement := 1111; Exit
end;
k := 1;
while k < RecNo do begin R:=R^.Next; inc(k) end;
GetElement := R^.val
end;
procedure Print(R: POne);
begin
if R = nil then Exit;
while R <> nil do begin Write(R^.val:5); R:= R^.next end;
WriteLn;
end;
procedure Free(var R: POne);
var Q: POne;
k: Integer;
begin
if R = nil then Exit;
k := 0;
repeat
Q := R^.next;
Dispose(R);
inc(k);
R := Q;
until R = nil;
Writeln('disposed ', k);
end;
VAR
F: File Of Integer;
root: POne;
mem: LongInt;
i, m, N, buf: Integer;
BEGIN
mem := MemAvail;
{Заполнение массива}
Write('Введите число целых чисел (четное число): '); ReadLn(n);
if n < 1 then begin WriteLn('Ошибочный ввод. Программа завершается.');
ReadLn; Halt(1);
end;
if odd(n) then begin
WriteLn('Вы ввели нечетное число: ',n,'. Увеличиваем на 1');
inc(n)
end;
{Создание и заполнение файла}
Assign(f, TheFileName); Rewrite(f);
Randomize;
for i := 1 to n do begin
buf := Random(Rand_range) + rand_offs;
Write(f, buf);
end;
Close(f);
{$I-} Reset(f); {$I+}
if IOResult <> 0 then begin
WriteLn('Странно, но не удается открыть файл ', TheFileName);
ReadLn; Halt(1)
end;
n := 0;
root := nil;
While NOT eof(f) do begin
Read(f, buf);
Add(root, buf);
end;
Print(root);
{ WriteLn(GetElement(root, 5));}
WriteLn('Элемент номер 5: ', GetElement(root, 5));
WriteLn('Число элементов: ',GetMaxElement(root));
WriteLn('mem used = ', mem - MemAvail);
i := 1;
m := GetMaxElement(root);
while i < m do begin
Write(GetElement(root, i) + GetElement(root, m):5);
inc(i); dec(m)
end;
WriteLn;
Free(root);
WriteLn('Memory lost: ',mem - memavail);
Write('Press ENTER ...');
ReadLn
END.
----- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (Академик)
Ответ отправлен: 04.06.2011, 20:22
Номер ответа: 267575 Россия, Саранск Организация: Мордовский госуниверситет, Саранск, Факультет Электронной Техники Адрес сайта:Программирование на Паскале ICQ # 320096696
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 267575
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.