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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.11.2011, 01:29   #1
Vovchik123
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 30
Смущение Перевод с Делфи на С#

кому не трудно вывести такое на си шарпе? очень нужно, а голова не работает в этом направлении
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Число строк и столбцов в массиве.
  N = 5;
var
  //Массив.
  Arr : array[1..N, 1..N] of Integer;
  //Индексы массива.
  i, j, i1, j1  : Integer;
  //Индексы, соответствующие максимальному элементу на главной и побочной диагоналях.
  IMax, JMax    : Integer;
  //Переменная для обмена значений в элементах массива.
  NumTmp        : Integer;
  //Строка для распечатки результатов.
  StrTmp        : String;
begin
 
  //Если N - чётное, то прерываем выполнение.
  if not Odd(N) then begin
    Raise Exception.Create('Число строк и столбцов массива чётное! Выполнение прервано.');
  end;
 
  //Очищаем Мемо.
  Memo1.Clear;
 
  //Инициализируем массив.
  //Заполняем массив возрастающими неповторяющимися значениями.
  NumTmp := -(N * N) div 2;
  for i := 1 to N do begin
    for j := 1 to N do begin
      Inc(NumTmp);
      Arr[i, j] := NumTmp;
    end;
  end;
 
  //Инициализируем генератор случайных чисел.
  Randomize;
  //Перемешиваем элементы в массиве.
  for i := 1 to N * N do begin
    i1 := 1 + Random(N); //Случайный индекс из диапазона 1..(0..N-1) = 1..N.
    j1 := 1 + Random(N);
    NumTmp := Arr[1, 1];
    Arr[1, 1] := Arr[i1, j1];
    Arr[i1, j1] := NumTmp;
  end;
 
  //Распечатка исходного массива.
  Memo1.Lines.Add('Исходный массив:');
  for i := 1 to N do begin
    StrTmp := '';
    for j := 1 to N do begin
      if StrTmp <> '' then begin
        StrTmp := StrTmp + Char(9);
      end;
      StrTmp := StrTmp + IntToStr( Arr[i, j] );
    end;
    Memo1.Lines.Add(StrTmp);
  end;
 
  //Решение задачи. Начало.
 
  //Поиск максимума на главной и побочной диагоналях.
  IMax := 1;
  JMax := 1;
  for i := 1 to N do begin
    //Главная диагональ.
    j := i;
    if Arr[i, j] > Arr[IMax, JMax] then begin
      IMax := i;
      JMax := j;
    end;
    //Вторая (побочная) диагональ.
    j := N + 1 - i;
    if Arr[i, j] > Arr[IMax, JMax] then begin
      IMax := i;
      JMax := j;
    end;
  end;
 
  //Меняем местами найденный масимальный элемент с элементом, расположенным
  //на пересечении диагоналей.
  //[i, i] - это координаты элемента, расположенного на пересечении диагоналей
  i := N div 2 + 1;
  NumTmp := Arr[IMax, JMax];
  Arr[IMax, JMax] := Arr[i, i];
  Arr[i, i] := NumTmp;
 
  //Решение задачи. Конец.
 
  //Распечатка результирующего массива.
  Memo1.Lines.Add('Результирующий массив:');
  for i := 1 to N do begin
    StrTmp := '';
    for j := 1 to N do begin
      if StrTmp <> '' then begin
        StrTmp := StrTmp + Char(9);
      end;
      StrTmp := StrTmp + IntToStr( Arr[i, j] );
    end;
    Memo1.Lines.Add(StrTmp);
  end;
 
end;
 
end.
Vovchik123 вне форума
Старый 15.11.2011, 07:47   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

За перевод плати.
Еще не понял прикол со строками:
Код:
if not Odd(N) then begin
    Raise Exception.Create('Число строк и столбцов массива чётное! Выполнение прервано.');
  end;
Нафига это, если N заранее известно? И к тому же не является четным . В таком виде программа никогда не будет выполнять это условие, а значит оно там не нужно.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума
Старый 15.11.2011, 08:27   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Utkin
Нафига это, если N заранее известно? И к тому же не является четным . В таком виде программа никогда не будет выполнять это условие, а значит оно там не нужно.
позволю себе не согласиться.

Безусловно, в данном случае N=5, оно является нечётным и Exception не возникнет. Т.е. условия никогда не выполнится. Тут Вы правы.
Но этой строчкой происходит защита не от сбоев программы/ОС - это защита ОТ ВНЕСЕНИЯ МОДИФИКАЦИЙ ПРОГРАММИСТОМ!
Представьте, Вы сопровождаете чужой код. Там стоит N=5 и никаких проверок на чётность/нечётность нет. Вы хотите сделать так, чтобы N откуда-то брался/вводился. Вы переделываете программу. Будете Вы учитывать, что N обязательно должно быть нечётным? Скорее всего- нет, не будете. (кстати, лучше расскажите мне, кто понял, а почему в данном коде нельзя, чтобы матрица была чётного порядка?!). Другое дело, я бы, скорее всего, ограничился тем, чтобы возле задания константы, где задаётся N, написал бы большой комментарий, о том, что N должно быть ОБЯЗАТЕЛЬНО чётным и ПОЧЕМУ это так...
Но это уже дело программиста - каким образом защищать код от некорректных модификаций...


Vovchik123, а в чём проблема с переводом? Если Вы хоть чуть-чуть знаете C# и сами писали код на Дельфи, то перевод не должен вызывать не малейших затруднений!
Serge_Bliznykov вне форума
Старый 15.11.2011, 08:35   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
это защита ОТ ВНЕСЕНИЯ МОДИФИКАЦИЙ ПРОГРАММИСТОМ!
Виртуальная наверно? Одного взгляда на программу мне хватило заметить, что это лишнее (ну для данного N, а не вообще). Естественно, первым дело я бы удалил это условие (ну или закомментировал бы). Это самообман какой-то.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из паскаля в делфи INFRON Помощь студентам 2 18.06.2011 17:46
Перевод с Делфи на C++ Anubys Помощь студентам 0 15.04.2011 14:37
Перевод с си на делфи LionTM Помощь студентам 0 09.01.2011 15:12
Перевод с делфи в си. Iceman Общие вопросы C/C++ 0 28.10.2009 15:21
Перевод из Паскаля в Делфи Родион Общие вопросы Delphi 2 28.08.2008 16:52