Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Асмик Александровна
Статус: Академик
Рейтинг: 8252
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Академик
Рейтинг: 5430
∙ повысить рейтинг »
lamed
Статус: Академик
Рейтинг: 5373
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Pascal (Паскаль)

Номер выпуска:1189
Дата выхода:08.06.2011, 19:30
Администратор рассылки:Boriss (Академик)
Подписчиков / экспертов:174 / 176
Вопросов / ответов:1 / 1

Вопрос № 183433: Среда програмирования Borland Pascal. Комментарии более чем желательны. Здравствуйте! Прошу помощи в следующем вопросе: Последовательность целых чисел заносится в файл. Прочитать из файла последовательность и записать в память в виде л...



Вопрос № 183433:

Среда програмирования Borland Pascal. Комментарии более чем желательны.

Здравствуйте! Прошу помощи в следующем вопросе:

Последовательность целых чисел заносится в файл. Прочитать из файла последовательность и записать в память в виде линейного списка. Найти сумму элементов списка с конца и с начала списка. Проверить решение на произвольном количестве последовательностей. Вывести на экран последовательность и результаты вычислений.

Отправлен: 30.05.2011, 19:05
Вопрос задал: Посетитель - 376401 (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает 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 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное