Страница 1 из 1

Паскаль, одномерные массивы

Добавлено: 08 ноя 2008, 22:21
maia
напишите пожалуйста программу,чтобы ввод чисел осуществлялся из внешнего файла вот её текст
Даны массивы А1, … , А20
В1, … , В20
Поменять местами Аmin и В max .

Re: Задача по PASCAL

Добавлено: 09 ноя 2008, 02:21
Naeel Maqsudov

Код: Выделить всё

type
  TData = integer;
var
  f:text;
  a,b:array[1..20] of TData;
  r:TData;
  Amin,Bmax,an,bn,i:integer;
begin
  assign(f,'c:\in.txt');
  reset(f);
  an:=0;

  writeln; writeln; writeln('A:');
  while not eoln(f) and (an<20) do begin
    inc(an);
    read(f,a[an]);
    write(a[an], '  ');
  end;
  writeln; writeln('B:');
  if not eoln(f) then readln(f);
  bn:=0;
  while not eof(f) and (bn<20) do begin
    inc(bn);
    read(f,b[bn]);
    write(b[bn], '  ');
  end;
  close(f);

  Amin:=1;
  for i:=2 to an do if a[i]<a[Amin] then Amin:=i;
  Bmax:=1;
  for i:=2 to bn do if b[i]>b[Bmax] then Bmax:=i;
  writeln; writeln;
  writeln('Min A[',Amin,']:=',a[Amin]);
  writeln('Max B[',Bmax,']:=',b[Bmax]);


  r:=b[Bmax];
  b[Bmax]:=a[Amin];
  a[Amin]:=r;

  writeln; writeln; writeln('A:');
  for i:=1 to an do write(a[i],'  ');
  writeln; writeln('B:');
  for i:=1 to bn do write(b[i],'  ');
  writeln;

  readln;
end.

Re: Задача по PASCAL

Добавлено: 09 ноя 2008, 16:55
maia
не могли бы вы прокомментировать что , где происходит??

Re: Задача по PASCAL

Добавлено: 09 ноя 2008, 17:16
Naeel Maqsudov

Код: Выделить всё

type
  TData = integer;
  {integer - заменяем на другой тип, если требуется другой тип, 
    напр. Real, в качестве базового}
var
  f:text;
  a,b:array[1..20] of TData;
  r:TData;
  Amin,Bmax,an,bn,i:integer;
begin
  {открываем файл. В файле содержится 2 строки входных данных, 
    разделенных пробелами}
  assign(f,'c:\in.txt');
  reset(f);
  an:=0; {счетчик количества элементов в А}

  writeln; writeln; writeln('A:');
  while not eoln(f) and (an<20) do begin
    {считывается до 20 значений из 1 строки. 
      Если меньше, то тоже ничего страшного}
    inc(an);
    read(f,a[an]);
    write(a[an], '  ');
  end;
  writeln; writeln('B:');

  {если в строке остались лишние числа, то их надо пропустить}
  if not eoln(f) then readln(f); 

  bn:=0;
  while not eof(f) and (bn<20) do begin
    {считывается до 20 значений из 2 строки. 
      Если меньше, то тоже ничего страшного}
    inc(bn);
    read(f,b[bn]);
    write(b[bn], '  ');
  end;
  close(f);

  {поиск номера минималоьного элемента А (внимание! номера)}
  Amin:=1;
  for i:=2 to an do if a[i]<a[Amin] then Amin:=i;

  {поиск номера максимального элемента В}
  Bmax:=1;
  for i:=2 to bn do if b[i]>b[Bmax] then Bmax:=i;
  writeln; writeln;
  writeln('Min A[',Amin,']:=',a[Amin]);
  writeln('Max B[',Bmax,']:=',b[Bmax]);

  {обмен элементов Bmax-ного и Amin-ного}
  r:=b[Bmax];
  b[Bmax]:=a[Amin];
  a[Amin]:=r;

  {вывод результатов}
  writeln; writeln; writeln('A:');
  for i:=1 to an do write(a[i],'  ');
  writeln; writeln('B:');
  for i:=1 to bn do write(b[i],'  ');
  writeln;

  readln;
end.