Написать программу ** паскале. Дана последовательность чисел заканчивающаяся 0,при...

0 голосов
49 просмотров

Написать программу на паскале.
Дана последовательность чисел заканчивающаяся 0,при считывании которого программа должна закончить свою работу.каждое число записано в отдельной строке.Все числа>=0.
числа заданы в файле input.txt,ответ в output.txt.нужно вывести нод этой последовательности. Плз помогите. Я задолбалась писать эту программу.


Информатика (880 баллов) | 49 просмотров
0

Скорее всего, НОД последовательности окажется единицей и ем длиннее последовательность, тем выше эта вероятность))). Я себе так представляю задачу: надо сначала разложить первый член последовательности на множители, создав из них некое множество Р. А потом получать каждый очередной член последовательности, также раскладывать его на множители, получая множество T и удалять из Р элементы, отсутствующие в T при помощи операции пересечения множеств.

0

Какой язык программирования и какая конкретно его версия?

0

т.е. ясно, что язык Паскаль, но какой - Turbo/Borland, Free Pascal, Pascal ABC, PascalABC.Net (в этом случае какая версия?), Object Pascal, Delphi, Lazarus... ? Во всех них разработчики умудрились сделать свои фишки в работе с множествами.

0

пофиг какой

0

Даже так? Ну хорошо... как говорится, "потом не жалуйтесь..." ))))

0

Решил сделать без множеств...

Дан 1 ответ
0 голосов
Правильный ответ
1. "Традиционный" вариант
//PascalABC.Net 3.0, сборка 1052
function NOD(a, b: longint): longint;
begin
  while a <> b do if a > b then a := a - b else b := b - a;
  NOD := a
end;

var
  f: Text;
  tNOD: longint;

begin
  Assign(f, 'input.txt'); Reset(f);
  if not Eof(f) then Readln(f, tNOD);
  var n: longint := 1;
  while (not Eof(f)) and (n > 0) and (tNOD > 1) do
  begin
    Readln(f, n);
    if n <> 0 then tNOD := NOD(tNOD, n)
  end;
  Close(f);
  Assign(f, 'output.txt'); Rewrite(f);
  Writeln(f,tNOD);
  Close(f)
end.

2. "Современный" вариант
//PascalABC.Net 3.0, сборка 1052
function NOD(a, b: integer): integer;
begin
  while a <> b do if a > b then a -= b else b -= a;
  Result := a
end;

var
  tNOD: integer := 0;
  n: integer;

begin
  foreach var sn in Readlines('input.txt') do
  begin
    n := StrToInt(sn);
    if tNOD = 0 then tNOD := n
    else
    if n = 0 then break else tNOD := NOD(tNOD, n);
  end;
  WriteAllText('output.txt', IntToSTR(tNOD));
end.

Пример файла input.txt находится во вложении, контрольный результат 4096

Скачать вложение Текст (TXT)
(142k баллов)