1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 29
1

Как правильно перевести код

31.01.2014, 22:33. Показов 2966. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста перевести отрывок кода Delphi на C#
Очень интересует как правильно написать, строки на истину и ложь

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
S,FA,min,hour,day,minmax,daymax,hourmax,client,croudcount,cleft: integer;
 
app: array [1. .50] of boolean;
 
apptime: array [1. .50] of byte;
 
obsl,appworktime: array [1. .50] of integer;
 
croud: array [1. .30] of boolean;
 
croudtime: array [1. .30] of byte;
var i,j: integer;
begin
randomize;
s: =0;
for i: =1 to trackbar1. Position do
begin
if app [i] =false then
begin
for j: =1 to trackbar2. Position do
begin
if croud [j] =true then
begin
croud [j]: =false;
app [i]: =true;
apptime [i]: =random (6) +10;
break
end;
end;
break
end;
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2014, 22:33
Ответы с готовыми решениями:

Как правильно перевести алгоритм
Помогите пожалуйста!!! Как правильно перевести этот алгоритм в программный код? Какие циклы...

как правильно перевести из индека в букву
series.XValues = sheet.get_Range(sheet.Cells, sheet.Cells); series.Values =...

Как правильно перевести блок схему
https://www.cyberforum.ru/attachments/389359d1397819639 Проверьте, пожалуйста, правильность работы...

Как правильно записать массив (перевести с С++)
Хочу этот отрывок кода написанный на C++ перевести на C#, а именно массив static Engine Engines ...

11
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
01.02.2014, 13:46 2
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Что-то типа того:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        private static Trackbar trackbar1 = new Trackbar(10);
        private static Trackbar trackbar2 = new Trackbar(12);
 
        private static int S, FA, min, hour, day, minmax, daymax, hourmax, client, croudcount, cleft;
        private static bool[] app = new bool[50];
        private static byte[] apptime = new byte[50];
        private static int[] obsl = new int[50];
        private static int[] appworktime = new int[50];
        private static bool[] croud = new bool[30];
 
        private static Random random = new Random();
 
        static void Main(string[] args)
        {
            for (int i = 0; i < trackbar1.Position; i++)
            {
                if (!app[i])
                {
                    for (int j = 0; j < trackbar2.Position; j++)
                    {
                        if (croud[j])
                        {
                            croud[j] = false;
                            app[i] = true;
                            apptime[i] = checked((byte)(random.Next(6) + 10));
                            break;
                        }
                    }
                    break;
                }
            }
 
            Console.WriteLine("Работа выполнена");
            Console.ReadKey();
        }
    }
 
    public class Trackbar
    {
 
        public Trackbar()
            : this(0)
        {
        }
 
        public Trackbar(int position)
        {
            Position = position;
        }
 
        public int Position { get; set; }
    }
}
static поля только из-за того, что в консольном приложении точка входа - это статический метод. Можно было бы даже для этого примера сделать другой вариат, который бы не требовал статических полей. А что тут говорить, сейчас сделаю:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        readonly static App app = new App();
 
        static void Main(string[] args)
        {
            app.Run();
 
            Console.WriteLine("Работа выполнена");
            Console.ReadKey();
        }
    }
 
    class App
    {
        private Trackbar trackbar1 = new Trackbar(10);
        private Trackbar trackbar2 = new Trackbar(12);
 
        private int S, FA, min, hour, day, minmax, daymax, hourmax, client, croudcount, cleft;
        private bool[] app = new bool[50];
        private byte[] apptime = new byte[50];
        private int[] obsl = new int[50];
        private int[] appworktime = new int[50];
        private bool[] croud = new bool[30];
 
        private static Random random = new Random();
 
        public void Run()
        {
            DoWork1();
            DoWork2();
        }
 
        private void DoWork1()
        {
            for (int i = 0; i < trackbar1.Position; i++)
            {
                if (!app[i])
                {
                    for (int j = 0; j < trackbar2.Position; j++)
                    {
                        if (croud[j])
                        {
                            croud[j] = false;
                            app[i] = true;
                            apptime[i] = checked((byte)(random.Next(6) + 10));
                            break;
                        }
                    }
                    break;
                }
            }
        }
 
        private void DoWork2()
        {
            //...
        }
    }
 
    public class Trackbar
    {
 
        public Trackbar()
            : this(0)
        {
        }
 
        public Trackbar(int position)
        {
            Position = position;
        }
 
        public int Position { get; set; }
    }
}
Или даже так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        readonly static App app = new App();
 
        static void Main(string[] args)
        {
            app.WorkEnded += App_WorkEnded; //Подписываемся на событие
            app.Run();
 
            Console.ReadKey();
        }
 
        //Метод-обработчик события WorkEnded
        static void App_WorkEnded(object sender, EventArgs e)
        {
            Console.WriteLine("Работа выполнена");
        }
    }
 
    public class App
    {
        private Trackbar trackbar1 = new Trackbar(10);
        private Trackbar trackbar2 = new Trackbar(12);
 
        private int S, FA, min, hour, day, minmax, daymax, hourmax, client, croudcount, cleft;
        private bool[] app = new bool[50];
        private byte[] apptime = new byte[50];
        private int[] obsl = new int[50];
        private int[] appworktime = new int[50];
        private bool[] croud = new bool[30];
 
        private static Random random = new Random();
 
        /// <summary>Инициируется, когда работа выполнена</summary>
        public event EventHandler WorkEnded; //Событие
 
        public void OnWorkEnded(EventArgs e) //метод инициирующий событие
        {
            //Так инициировать событие безопасно в многопоточном контексте, 
            //то есть не напрямую вызывать WorkEnded(this, e); ведь WorkEnded
            //может стать null после проверки
            EventHandler handler = WorkEnded;
            if (handler != null)
                handler(this, e);
        }
 
        public void Run()
        {
            DoWork1();
        }
 
        private void DoWork1()
        {
            for (int i = 0; i < trackbar1.Position; i++)
            {
                if (!app[i])
                {
                    for (int j = 0; j < trackbar2.Position; j++)
                    {
                        if (croud[j])
                        {
                            croud[j] = false;
                            app[i] = true;
                            apptime[i] = checked((byte)(random.Next(6) + 10));
                            break;
                        }
                    }
                    break;
                }
            }
            //инициируем срабатывание события и вызов кода подписанного на это событие
            //EventArgs.Empty конкретно в этом примере как заглушка, а так можно передавать
            // какие-то данные классом наследником от EventArgs
            OnWorkEnded(EventArgs.Empty); 
            //Только в событии нужно будет использовать: public event EventHandler<SomethingEventArgs> WorkEnded;
        }
    }
 
    //Просто имитация трекбара
    public class Trackbar
    {
 
        public Trackbar()
            : this(0)
        {
        }
 
        public Trackbar(int position)
        {
            Position = position;
        }
 
        public int Position { get; set; }
    }
}
1
1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 29
02.02.2014, 22:20  [ТС] 3
Casper-SC,
Вот еще эту строку, как правильно перевести?
Delphi
1
timer1. Interval: =round (1000/ (Trackbar7. Position));
Проверьте пожалуйста мой вариант
C#
1
timer1.Interval = Math.Round(1000 / (trackBar7.Value));
Выдает следующую ошибку
Ошибка 1 Неоднозначный вызов следующих методов или свойств: "System.Math.Round(decimal)" и "System.Math.Round(double)"
Может мне его как-то конвертировать или как-то иначе можно записать?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.02.2014, 22:26 4
EVGENYM, ну сделай явное приведение
C#
1
timer1.Interval = Math.Round(1000 / ((double) trackBar7.Value));
0
1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 29
02.02.2014, 22:35  [ТС] 5
Psilon,
Пробовал, ошибка
Ошибка 1 Не удается неявно преобразовать тип "double" в "int". Существует явное преобразование (возможно, пропущено приведение типов)

Сделал вот так.
C#
1
2
3
double x;
            x=1000 / (trackBar6.Value);
            timer1.Interval = Convert.ToInt32(Math.Round(x));
Ошибок не выдает
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.02.2014, 22:36 6
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

C#
1
timer1.Interval = (int) Math.Round(1000m/trackBar6.Value);
0
1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 29
02.02.2014, 22:47  [ТС] 7
Psilon,
Спасибо,помогло! А что означает буковка "1000m"???

Добавлено через 8 минут
Нашел ответ на свой вопрос. Для спецификации литералов типа decimal добавьте к значению букву m или M (9.95М является литералом, имеющим тип decimal).
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
02.02.2014, 23:06 8
Цитата Сообщение от EVGENYM Посмотреть сообщение
А что означает буковка "1000m"???
То что литерал "1000" типа decimal, а не int
1
1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 29
02.02.2014, 23:54  [ТС] 9
Casper-SC, Psilon,
А как вот этот отрывок правильно написать на C#
Delphi
1
2
3
4
for i: =1 to 50 do
begin
stringgrid2. Cells [0, i-1]: ='';
end;
Вот мой код на C#
C#
1
2
3
4
for (i = 1; i < 50; i++)
            {
                dataGridView2.Rows[0].Cells[i - 1].Value = "";
            }
После запуска, при присвоении значений параметрам, возникает такая ошибка на этой dataGridView

Необработанное исключение типа "System.ArgumentOutOfRangeException" в mscorlib.dll

Дополнительные сведения: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.


По-моему я совсем не понимаю принцип добавления... Если кто знает, подскажите пожалуйста
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.02.2014, 23:56 10
EVGENYM, нет, неправильно. Индексы нумеруются с нуля. А в паскале - откуда угодно, но обычно с единицы. пятидесятый элемент массива имеет индекс a[49];
0
1 / 1 / 0
Регистрация: 16.04.2012
Сообщений: 29
03.02.2014, 00:59  [ТС] 11
Psilon,
Все равно выдает ошибку. Что еще не так?
C#
1
2
3
4
for (i = 0; i < 49; i++)
            {
                dataGridView2.Rows[0].Cells[i - 1].Value = "";
            }
А вот так будет правильно?
C#
1
dataGridView1.Rows.Add(i-1,"");
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
03.02.2014, 12:19 12
Если изначально I = 0, а при обращении к индексу дата грида ты из 0 вычитаешь 1 и пытаешься обратиться к индексу -1, когда минимальный индекс всегда 0.

Добавлено через 43 секунды
Убери -1 отовсюду
0
03.02.2014, 12:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2014, 12:19
Помогаю со студенческими работами здесь

Как правильно перевести ключ и вектор в байты Aes
Всем здрасте. Прошу прощения если такая тема уже была, но я толком ответа не нашел. Такой вопрос: у...

Как перевести в код?
под номеров 12,как перевести в код

Как перевести код из Pascal в С#
uses crt; const nmax=100; var a:array of integer; n,i,pp,pn,po,mx:integer; s:string;...

Как перевести код с MSIL на C#
Мне интересно как это сделать. Вобщем вот написал на MSIL код: .typelist { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru