LINUX.ORG.RU

Pascal

 ,


0

1

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

program lab1_1;
var
   Arrx : array[1..25] of char;
   Arr  : array[1..10, 1..25] of char;
   i, j, k     : longint;
   x, y    : integer;
begin
     assign(input, 'in.txt');
     reset(input);
     assign(output, 'result.txt');
     rewrite(output);

     for i := 1 to 10 do
     begin
          for j := 1 to 25 do
          begin
               read(Arr[i, j]);
               write(Arr[i, j]);
          end;
          readln; writeln;
     end;
     writeln;
      writeln('Sort numbers: ');
      for k:=1 to 25 do begin
  for j := 16 to 25 do
     begin
  for i := 2 to 10 do
begin
  if Arr[i-1,  j] <= Arr[i, j] then
  begin
  Arrx[k]:= Arr[i-1, j];
  Arr[i-1, j] := Arr[i, j];
  Arr[i, j]  := Arrx[k];
 end;
        end;
        end;
        end;
  write(Arr);
     close(input);
     close(output);     
       end.  

Ответ на: комментарий от missxu

Это бесполезно, мальчик читать не умеет, только писать.

bormant ★★★★★ ()
Ответ на: комментарий от Im_not_a_robot

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

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 3)
Ответ на: комментарий от bormant

Да, прошу простить. То последнее сообщение про «сухой остаток» не увидел. Делать пытался на основе кода «есть слона по частям». Честно, долго пытался адаптировать, вникать. Уж очень прошу прощения.

KrasnoGlazik ()
Ответ на: комментарий от KrasnoGlazik

Для PascalABC (этого маленького кастрата) код «сухого остатка» можно трансформировать так:

const nmax=10; LineLen=25; KeyB=15; KeyE=24;
type TLine = array [0..LineLen] of Char;
var
  fi, fo: Text;
  a: array [1..nmax] of TLine;
  t: TLine;
  n, i, j, k, p: Integer;
begin
  Assign(fi,'input.txt');  Reset(fi);
  Assign(fo,'result.txt'); Rewrite(fo);
  {n:=0;}
  while (n<nmax) and not EoF(fi) do begin
    Inc(n); j:=0;
    while (j<LineLen) and not EoLn(fi) do begin
      Read(fi,a[n][j]); Write(fo,a[n][j]); Inc(j);
    end;
    a[n][j]:=#0;
    ReadLn(fi); WriteLn(fo);
  end;
  for i:=2 to n do begin
    t:=a[i]; j:=i-1;
    while j>0 do begin
      for k:=KeyB to KeyE do begin
        p:=Ord(t[k])-Ord(a[j][k]);
        if p<>0 then Break;
      end;
      if p<0 then begin
        a[j+1]:=a[j]; Dec(j);
      end else Break;
    end;
    a[j+1]:=t;
  end;
  WriteLn(fo); WriteLn(fo,'Sorted:');
  for i:=1 to n do begin
    for j:=0 to LineLen do
      if a[i][j]<>#0 then Write(fo,a[i][j])
      else Break;
    WriteLn(fo);
  end;
  Close(fi); Close(fo);
end.

Либо, если 10 строк не короче 25 символов гарантированы
const nmax=10; LineLen=25; KeyBeg=16; KeyEnd=25;
type TLine = array [1..LineLen] of Char;
var
  fi, fo: Text;
  a: array [1..nmax] of TLine;
  t: TLine;
  i, j, k, p: Integer;
begin
  Assign(fi,'input.txt');  Reset(fi);
  Assign(fo,'result.txt'); Rewrite(fo);
  for i:=1 to nmax do begin
    for j:=1 to LineLen do begin
      Read(fi,a[i][j]); Write(fo,a[i][j]);
    end;
    ReadLn(fi); WriteLn(fo);
  end;
  for i:=2 to nmax do begin
    t:=a[i]; j:=i-1;
    while j>0 do begin
      for k:=KeyBeg to KeyEnd do begin
        p:=Ord(t[k])-Ord(a[j][k]);
        if p<>0 then Break;
      end;
      if p<0 then begin
        a[j+1]:=a[j]; Dec(j);
      end else Break;
    end;
    a[j+1]:=t;
  end;
  WriteLn(fo); WriteLn(fo,'Sorted:');
  for i:=1 to nmax do begin
    for j:=1 to LineLen do Write(fo,a[i][j]);
    WriteLn(fo);
  end;
  Close(fi); Close(fo);
end.

bormant ★★★★★ ()
Ответ на: комментарий от bormant

Большое вам спасибо. Полностью разобрался. Один только вопрос - чем полезно использовать константы вместо явного указания числа?

KrasnoGlazik ()
Ответ на: комментарий от KrasnoGlazik

Код пишется один раз, а поддерживается обычно намного дольше. Если по коду будут разбросаны «магические числа», то при попытке внести исправления, придется разбираться, что именно означает вот эта 10 — число строк, или может, начало ключа, или еще что-то. При использовании именованных констант достаточно внести изменения только в одном месте без риска нарушить алгоритм.

bormant ★★★★★ ()
Ответ на: комментарий от KrasnoGlazik

В вузе самое главное — это научиться учиться и завести знакомства, остальное — просто сопутствующий процесс :-)

Если специальность не порограммерская, то от информатики требуется научить делить задачу на разумные подзадачи, анализировать зависимости, строить непротиворечивую последовательность действий для получения решений, строить последовательность действий по получению решения общей задачи — суть алгоритмизировать процесс.

bormant ★★★★★ ()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от bormant

А вот раз такая тема пошла, с вами можно поговорить вне публичного форума? Просто есть пару вопросов, с которыми определиться никак не могу.

KrasnoGlazik ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.