Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2012, 17:10   #1
Sersgant
Новичок
Джуниор
 
Регистрация: 14.06.2012
Сообщений: 1
Радость Перевод из Pascal в Delphi

Возникла проблема.
Решил задачи на Pascal и теперь их же нужно написать на delphi
Помогите их перевести в delphi используя лишь button, edit-ы, label-ы.

1. Дана матрица размера M x N (M и N - четные числа). Поменять местами левую верхнюю и правую нижнюю четверти матрицы.
Код:
const nmax=100;
var
  a: array[1..nmax,1..nmax] of integer;
  i,j,n,m,k,tmp: integer;
begin
  repeat
    write('Введите размеры массива n,m: ');
    readln(n,m);
  until (n mod 2=0)and(m mod 2=0);
  writeln('Исходная матрица:');
  k:=0;
  for i:=1 to n do
  begin
    for j:=1 to m do
    begin
      inc(k);
      a[i,j]:=k;
      write(a[i,j]:4);
    end;
    writeln;
  end;
  writeln;
  for i:=1 to n div 2 do
    for j:=1 to m div 2 do
    begin
      tmp:=a[i,j];
      a[i,j]:=a[n+1-i,m+1-j];
      a[n+1-i,m+1-j]:=tmp;
    end;
  writeln('Полученная матрица:');
  for i:=1 to n do
  begin
    for j:=1 to m do write(a[i,j]:4);
    writeln;
  end;
  readln;
end.
2. Дана квадратная матрица A порядка M. Повернуть её на угол 90 градусов в отрицательном направлении, то есть по часовой стрелке (при этом элемент А1,1 перейдет в A1,M, элемент A1,M - AM,M и т.д). Вспомогательную матрицу использовать нельзя.

Код:
Program Matrix100;
var n,i,j,p,k,x:integer;
    a:array[1..50,1..50] of integer;
begin
write('n=');readln(n);
writeln('Ischodnaia matritsha:');
randomize;
for i:=1 to n do
begin
 for j:=1 to n do begin
    a[i,j]:=random(15)-4;
    write(a[i,j]:4);
 end;
 writeln;
end;
p := n div 2; {разбиваем матрицу на 4 части}
for i:=1 to p do
for k:=i to n-i do{меняем элементы по кругу из одной четверти в другую}
begin
  x:=a[i,k];
  a[i,k]:=a[n-k+1,i];
  a[n-k+1,i]:=a[n-i+1,n-k+1];
  a[n-i+1,n-k+1]:=a[k,n-i+1];
  a[k,n-i+1]:=x;
end;
Writeln('Povorot na 90 grad:');
for i:=1 to n do
begin
  for j:=1 to n do write(a[i,j]:4);
  writeln;
end;
readln
end.
3. Дан файл целых чисел. найти количество содержащихся в нем серий ( то есть наборов последовательно расположенных одинаковых элементов). Например, для файла с элементами 1, 5, 5, 5, 4, 4, 5 результат равен 4.
Код:
Var
 f:file of Byte;
 i,a1,a2,Num_of_Ser:Byte;
Begin
 Randomize;
 Num_of_Ser:=0;
 Assign(f,'D:\fff');
 Rewrite(f);
 For i:=1 to 20 do
 begin
   a1:=Random(8);
   write(f,a1);
   write(a1,' ');
 end;
 Close(f);
 Writeln;
 Writeln;
 a1:=9;
 Reset(f);
 Repeat
  read(f,a2);
  if a2<>a1 then Inc(Num_of_Ser);
  a1:=a2;
 Until EoF(f);
 Close(f);
 Writeln('Number of series is ',Num_of_Ser);
 Readln
End.
4. Даны два файла вещественных чисел с именами S1 и S2, элементы которых упорядочены по возрастанию. Объединить эти файлы в новый файл с именем S3 так, чтобы его элементы также оказались упорядоченными по возрастанию.

Код:
Procedure qSort( Var ar : Array Of Real; Low, High : Integer);
Var 
  i, j   : Integer;
  m, wsp : Real;
Begin
  i := Low;
  j := High;
  m := ar[Trunc((i + j)/2)];
  Repeat
    While(ar[i] < m) Do i := i + 1;
    While(ar[j] > m) Do j := j - 1;
    If(i <= j) Then 
    Begin
     wsp := ar[i];
     ar[i] := ar[j];
     ar[j] := wsp;
     i := i + 1;
     j := j - 1;
    End;
  Until (i > j);
  If(Low < j) Then qSort(ar, Low, j);
  If(i < High) Then qSort(ar, i, High);
End;

{ Основная программа }

Var 
  S1, S2, S3 : TextFile;
  Res : Array Of Real;
  fileName : String;
  it, Capacity, i : Integer;
Begin
  Write('File name S1 -> ');
  ReadLn(fileName);

  Assign(S1, fileName);
  Reset(S1);

  Write('File name S2 -> ');
  ReadLn(fileName);

  Assign(S2, fileName);
  Reset(S2);

  Write('File name S3 -> ');
  ReadLn(fileName);

  Assign(S3, fileName);
  ReWrite(S3);

  Capacity := 1;
  it := 0;

  SetLength(Res, it);

  While Not Eof(S1) Do { Копируем первый файл в массив }
  Begin
    If it = Length(Res) Then SetLength(Res, it + Capacity); { Если требуется, увеличиваем длину массива на Capacity. }
    Read(S1, Res[it]); {Считываем очередной элемент из файла в массив.}
    Inc(it);{ Индекс следующего элемента массива = Количество элементов, записанных в массив }
  End;
  Close(S1);
  If it < Length(Res) Then SetLength(Res, it);{ Корректируем длину массива, в соответствие с количеством записанных в него элементов }
  { Теперь массив Res содержит все числа, прочитанные из файла S1. }
  While Not Eof(S2) Do { Аналогично копируем второй файл в массив }
  Begin
    If it = Length(Res) Then SetLength(Res, it + Capacity);
    Read(S2, Res[it]);
    Inc(it);
  End;
  Close(S2);
  If it < Length(Res) Then SetLength(Res, it);
  { Теперь массив Res содержит все числа, прочитанные из файла S1 и S2. }

  qSort(Res, 0, it - 1); { Сортируем полученный массив }

  For i := 0 To it - 1 Do { и записываем в файл }
    WriteLn(S3, Res[i]:6:3);
  Close(S3);
End.
Код нужно оформлять по правилам: тегом [CODE]..[/СODE]
Модератор.

Последний раз редактировалось Serge_Bliznykov; 15.06.2012 в 10:21.
Sersgant вне форума Ответить с цитированием
Старый 15.06.2012, 10:26   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тут всё несложно, но
1) требуются ваши мысли, откуда брать исходные данные (из каких эдитов, где они расположены, куда выводить результаты и т.д. - т.е. дизайнерство формы.
2) согласно выбранному плану размещать на форме нужные контролы и везде в программе,
где есть Read / Readln заменять на (например, n := StrToIntDef(Edit1.Text, 0); ),
везде, где есть WriteLn - заменять на вывод информации в нужные контролы (для текстовой информации удобно использовать TMemo
для отображения массивов - TStringGrid
разумеется, вместо repeat until ПокаНЕВвелиНужное - нужно просто ВЫБРАСЫВАТЬ из процедуры.
например,
Код:
procedure TForm1.Button1Click(Sender: TObject);
const nmax=100;
var
  a: array[1..nmax,1..nmax] of integer;
  i,j,n,m,k,tmp: integer;
begin
  n := StrToIntDef(Edit1.Text, -1);
  if (n<0) or (n mod 2=1) or (n>nmax) then begin
    ShowMessage('Введите N - натуральное чётное число от 2 до '+IntToStr(nmax));
    Exit;
  end;
  m := StrToIntDef(Edit2.Text, -1);
  if (m<0) or (m mod 2=1) or (m>nmax) then begin
    ShowMessage('Введите M - натуральное чётное число от 2 до '+IntToStr(nmax));
    Exit;
  end;
  ... тут ваш код вычислений дальше...
короче, работа несложная, но достаточно объёмная...
начните, и, постепенно, всё у Вас получится. Вы легко справитесь (тем более, если программы писали Вы самостоятельно)!

Последний раз редактировалось Serge_Bliznykov; 15.06.2012 в 10:32.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из С# в Delphi или Pascal Asblue C# (си шарп) 5 30.03.2013 01:53
Перевод с Pascal в Delphi 7 volk_102 Помощь студентам 1 12.12.2011 12:58
Перевод кода с Pascal в Delphi Rin Общие вопросы Delphi 5 09.01.2011 01:39