Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Разница выполнения операции

Есть ли разница в скорости выполнения этих операций?
Которая из них будет работать быстрее?
Большая ли разница?

1:
for(int i=0;i<100;i++)
{
    using(var entityContext = new ModelContainer())
    {
         var persons = entityContext.Persons.ToList();
    }
}


2:
using(var entityContext = new ModelContainer())
{
    for(int i=0;i<100;i++)
    {
         var persons = entityContext.Persons.ToList();
    }
}
Вопрос: Порядок выполнения операций управляемый приоритетом

В книге Хейлсберг А. - Язык программирования C# - 2012.pdf

Цитирую:

Когда в выражении содержится много операций, порядок, в котором выполняются отдельные операции, определяется приоритетом. Например, выражение
x + y * z вычисляется как x + (y * z), поскольку операция * имеет более
высокий приоритет по сравнению с операцией +.


Затем, говорится:
Порядок выполнения операций, управляемый приоритетом, — не тот порядок, в котором вычисляются операнды. Операнды вычисляются слева направо, точка. В предыдущем примере сначала будет вычисляться x, затем y, затем z, затем будет выполняться умножение, затем сложение. Вычисление операнда x произойдет раньше,
чем y, потому что x находится слева от y; выполнение операции умножения произойдет раньше, чем сложения, потому что умножение имеет более высокий приоритет.


Если понимать как говорит автор то получается

1. вычисляем x (?????!!!!)
2. Умножаем y, z
3. складываем x + результат 2 операции

Что подразумевается под "вычислением операндов" ?
Ответ: Спасибо, разобрался. Просто небольшая неточность в описании.
Вопрос: Реализовать в виде набора подпрограмм (процедур или функций) выполнение операций над обыкновенными дробями

Реализовать в виде набора подпрограмм (процедур или функций) выполнение операций над обыкновенными дробями вида x/y (а — целое, b — натуральное):
Для реализации подпрограмм использовать записи.(т.е student=record)
1.обратная дробь,
2.сложение, вычитание, умножение, деление,
3.сокращение,
4.возведение дроби в степень,
5.функции, реализующие операции отношения (равно, не равно, больше или равно, меньше или равно, больше, меньше)
6.отсортировать массив обыкновенных дробей в порядке возрастания (используя созданные подпрограммы).


Помогите пожалуйста решить. Можно даже в Pascal NET

у меня есть,только там без записей

Код Pascal
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
Var  x, y, {числитель и знаменатель дроби }
   p, q, {числитель и знаменатель дроби }
   s, t:integer; {числитель и знаменатель дроби }
 
   procedure wwod(var a, b:integer);
   begin
      writeln;
      write('Введите целые: числитель и знаменатель обыкновенной дроби ');
      readln(a,b);
   end;
 
   procedure wywod(a, b:integer);
   begin
      write(a,'/',b);  writeln;
   end;
    { Вычисление НОД(x,y) }
   function nod(x, y:integer):integer;
   begin
      if (x=0) or (y=0) then nod:=1
      else
      begin
         while x<>y do
         begin
            while x>y do x:=x-y;
            while y>x do y:=y-x;
         end;
         nod:=x;
      end;
   end;
   { Сокращение дроби }
   procedure sokr(var c, d:integer);
   var r:integer;
   begin
      r:=nod(c, d);
      c:=c div r;
      d:=d div r;
   end;
   
   { Сложение двух дробей }
   procedure sum(a, b, c, d:integer; var e, f:integer);
   var r:integer;
   begin
      e:=a*d+b*c;
      f:=b*d;
      sokr(e,f)
   end;
   { Вычитание двух дробей }
   procedure raz(a, b, c, d:integer; var e, f:integer);
   var r:integer;
   begin
      e:=a*d-b*c;
      f:=b*d;
      sokr(e,f)
   end;
   { Умножение двух дробей }
   procedure mult(a, b, c, d:integer; var e, f:integer);
   var r:integer;
   begin
      e:=a*c;
      f:=b*d;
      sokr(e,f);
   end;
   { Деление двух дробей }
   procedure del(a, b, c, d:integer; var e, f:integer);
   var r:integer;
   begin
      e:=a*d;
      f:=b*c;
      sokr(e, f);
   end;
   begin
      write('Введите первую дробь ');
      wwod(x,y);
      write('Введите вторую дробь ');
      wwod(p,q);
      write('Сумма равна ');
      sum(x, y, p, q, s, t);
      wywod(s, t);
      write('Разность равна ');
      raz(x, y, p, q, s, t);
      wywod(s, t);
      write('Произведение равно ');
      mult(x, y, p, q, s, t);
      wywod(s, t);
      write('Частное равно ');
      del(x, y, p, q, s, t);
      wywod(s, t);
   end.
Ответ: Посмотрите эти темы

Вопрос: Выполнение операции XOR

Здравствуйте. Составляю алгоритм для обмена данными с кассовым аппаратом (VIKI Print 57 Plus K), пакет данных для отправки нужно составлять вручную, проблема заключается в том, что я не могу понять, как вычислить хэш для набора байтов пакета данных. Вот цитата из документации, обратите внимание на подчеркнутый текст:
CRC- контрольная сумма пакета. Контрольная сумма подсчитывается по алгоритму:
выполнение операции XOR для всех байт блока, включая ETX, но исключая STX. Данные
контрольной суммы занимают два байта и являются символьным представлением числа
в шестнадцатеричной системе исчисления.
ETX - символ начала пакета, STX - символ конца пакета, но суть не в них
Объясните пожалуйста, что значит выполнить операцию XOR для всех байт блока? Насколько я знаю, XOR может выполняться для двух чисел, например 127^35, но как выполнять ее для набора байт, ума не приложу.
Ответ: Спасибо большое за помощь, действительно помогли во всем разобраться. Только вот кассы под рукой нет, а написать алгоритм взаимодействия нужно, поэтому придется работать так сказать "без отладки".
Вопрос: Электронная таблица с возможностью выполнения операций сложения и вычитания

Электронная таблица с возможностью выполнения операций сложения и вычитания средствами Delphi помоги пожалуйсто написать программу
Ответ: Спасибо большое тебе ))Я два месяца мучилась с кодами ,наконецто кто то помог и я разобралась))я благодарю тебя))
Вопрос: Строки в текстовых файлах: Произошло переполнение строки при выполнении операции "+"

Здравствуйте.
Есть код, который перемещает цифры в строках в конец строк и записывает это всё в новый файл.
На 26-ой строке (s1:=s1+s[i]) выбивает ошибку: «Произошло переполнение строки при выполнении операции "+"». С чем это связано и как этого можно избежать?

Pascal
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
var f,g:text; i,j,n:integer; s,s1:string; 
begin
    assign(f, 'filef.txt');
    rewrite(f); writeln;
    writeln('Введите количество строк в файле (не больше двадцати!):'); readln(n); writeln;
if n>20 then
begin
   writeln('Неправильное значение (не больше двадцати)!'); close(f);
   end
 else
  begin
    for i:=1 to n do
    begin
        writeln('Введите строку:'); readln(s); writeln(f,s);
    end;
    close(f); reset(f);
    assign(g, 'fileg.txt'); rewrite(g);
       while not eof(f) do
    begin
       readln(f,s); s1:=''; j:=Length(s); i:=1;
        repeat
           if s[i] in ['0'..'9']
            then
             begin
               s1:=s1+s[i]; delete(s,i,1);
             end
            else inc(i);
        until i>j;
       s:=s+s1; writeln(g,s);
    end;
    close(f); close(g); writeln;
    writeln('Файл g содержит:');
    reset(g);
    while not eof(g) do
    begin
        readln(g,s); writeln(s);
    end;
    close(g);
end;
   readln;
end.
Ответ:
Pascal
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
var f,g:text;
    i,j,n,k:integer;
    s:string;
    c:char;
begin
assign(f,'filef.txt');
repeat
write('Введите количество строк в файле (не больше двадцати!) n=');
readln(n);
if not(n in [1..20]) then writeln('Введите число от 1 до 20');
until n in [1..20];
rewrite(f);
for i:=1 to n do
 begin
  writeln('Введите строку:');
  readln(s);
  writeln(f,s);
 end;
reset(f);
assign(g, 'fileg.txt');
rewrite(g);
while not eof(f) do
 begin
  readln(f,s);
  n:=Length(s);
  k:=0;
  for i:=n downto 1 do
  if s[i] in ['0'..'9'] then
   begin
    k:=k+1;
    c:=s[i];
    for j:=i to n-k do
    s[j]:=s[j+1];
    s[n-k+1]:=c;
   end;
  writeln(g,s);
 end;
writeln('Файл g содержит:');
close(f);
reset(g);
while not eof(g) do
 begin
  readln(g,s);
  writeln(s);
 end;
close(g);
end.
Вопрос: Что такое синхронное и асинхронное выполнение операций

Объясните пожалуйста, что такое синхронное и асинхронное выполнение операций ?
Ответ: Bulky, мой ещё короче. Попробуйте, в свою очередь, вникнуть в него.
Вопрос: Инициализация полей до выполнения тела конструктора

Добрый день. Решил написать программку по вычислению площади, периметра треугольника; проверки его на равнобедренность и т.д. Для этого создал классы Point и Triangle.
Кликните здесь для просмотра всего текста
Java
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
class Point {
 
    private int x;
    private int y;
    
    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    public int getCoorX() {
        return x;
    }
    
    public int getCoorY() {
        return y;
    }
    
    void setCoorX(int x) {
        this.x = x;
    }
    
    void setCoorY(int y) {
        this.y = y;
    }
 
}

Кликните здесь для просмотра всего текста
Java
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
import static java.lang.Math.*;
 
class Triangle {
 
    private Point a;
    private Point b;
    private Point c;
    //lengths of sides
    private double ab;
    private double bc;
    private double ca;
    private double perimetr;
    private double square;
    
    Triangle(Point a, Point b, Point c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
    
    //ab initialization
    {
        double temp1 = pow(a.getCoorX() - b.getCoorX(), 2);
        double temp2 = pow(a.getCoorY() - b.getCoorY(), 2);
        ab = sqrt(temp1 + temp2);
    }
    //bc initialization
    {
        double temp1 = pow(b.getCoorX() - c.getCoorX(), 2);
        double temp2 = pow(b.getCoorY() - c.getCoorY(), 2);
        ab = sqrt(temp1 + temp2);
    }
    //ca initialization
    {
        double temp1 = pow(c.getCoorX() - a.getCoorX(), 2);
        double temp2 = pow(c.getCoorY() - a.getCoorY(), 2);
        ab = sqrt(temp1 + temp2);
    }
    
    public double getLengthAB() {
        return ab;
    }
    
    public double getLengthBC() {
        return bc;
    }
    
    public double getLengthCA() {
        return ca;
    }
    
    @Override
    public String toString() {
        return "Lengths of the triangle's sides: AB = " + getLengthAB()
                + ", BC = " + getLengthBC() + ", CA = " + getLengthCA();
    }
    
    //Test
    public static void main(String[] args) {
        Point a = new Point(0,0);
        Point b = new Point(10,0);
        Point c = new Point(5,5);
        Triangle tr = new Triangle(a, b, c);
        //System.out.println(tr.toString());
    }
 
}

В класс Triangle решил добавить поля: длины сторон, периметр, площадь. Длины сторон решил вычислять не через метод, а в блоке инициализации. И вот на этом месте видимо я ошибся. Поймал свой "любимый" NullPointerException в строке 63, с отсылкой на строку 23. Я так понял, что по непонятным мне причинам поля a,b,c содержат null.
Пришлось учиться пользоваться jdb. И выявил интересную особенность. Когда происходит вызов конструктора (строка 63), то далее выполняется не его тело, а блоки инициализации. Естественно поля a,b,c остались пустыми и поэтому ошибка.
Программу править не надо. Меня интересуют два момента:
1) Правильно ли будет решить проблему, если перенести вычисление ab, bc, ac в тело конструктора? А блоки инициализации убрать.
2) Где можно почитать о порядке выполнения операций в Java? Я в книге не встречал слов о том, что при вызове конструктора, сначала выполняются блоки инициализации, и только потом тело конструктора. Неожиданность для меня.
Ответ: DevAlone, читаю Хортсманна. Как заканчиваю главу, читаю те же темы в Блинове/Романчике и оттуда же прорешиваю несколько задач. Эккеля скачал, но пока "отложил в сторонку", т.к. многие советуют его читать позже, чтобы отшлифовать уже имеющиеся знания. Так же "ждет своего часа" книга по паттернам проектирования.
Не помню чтобы в Хортсманне встречал про порядок выполнения операций, возможно запамятовал.
vcrop, спасибо, интересный материал.
Вопрос: При выполнении операций +, — , * и / не очищать экран

Всем доброго дня!
Подскажите , что нужно сделать в коде ниже, чтобы при нажатии на операцию +,-,/,* числа не исчезали...Сейчас такая последовательность: нажимаю 5, потом + и число пять пропадает, нажимаю дальше 5, потом равно и выводится результат...
А нужно нажимаю 5, потом + и число не исчезает...


Код Java(TM) 2 Platform Standard Edition 5.0
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
public class CalcFrame extends JFrame {
    JTextArea display= new JTextArea();
    JPanel buttonPanel = new JPanel(new GridLayout(5,3));
    JButton button0 = new JButton("0");
    JButton button1 = new JButton("1");
    JButton button2 = new JButton("2");
    JButton button3 = new JButton("3");
    JButton button4 = new JButton("4");
    JButton button5 = new JButton("5");
    JButton button6 = new JButton("6");
    JButton button7 = new JButton("7");
    JButton button8 = new JButton("8");
    JButton button9 = new JButton("9");
    JButton buttonSum = new JButton("+");
    JButton buttonBack = new JButton("C");
    JButton buttonDivide = new JButton("/");
    JButton buttonSub = new JButton("-");
    JButton buttonMul = new JButton("*");
    JButton buttonStart = new JButton("=");
    int firstValue = 0;
    String operation = "+";
    CalcFrame() {
        setBounds(300, 300, 300, 300);
        button0.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText() + "0");
            }
        });
        button1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"1");
            }
        });
        button2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"2");
            }
        });
        button3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"3");
            }
        });
        button4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"4");
            }
        });
        button5.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"5");
            }
        });
        button6.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"6");
            }
        });
        button7.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"7");
            }
        });
        button8.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"8");
            }
        });
        button9.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                display.setText(display.getText()+"9");
            }
        });
        buttonBack.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String temp = display.getText();
                display.setText(temp.substring(0,temp.length()-1));
            }
        });
        buttonSum.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstValue = Integer.valueOf(display.getText());
                display.setText("");
                operation = "+";
            }
        });
        buttonMul.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstValue = Integer.valueOf(display.getText());
                display.setText("");
                operation = "*";
            }
        });
        buttonDivide.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstValue = Integer.valueOf(display.getText());
                display.setText("");
                operation = "/";
            }
        });
        buttonSub.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                firstValue = Integer.valueOf(display.getText());
                display.setText("");
                operation = "-";
            }
        });
        buttonStart.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                int secondValue = Integer.valueOf(display.getText());
                if("+".equals(operation)){
                    display.setText((firstValue+secondValue)+"");
                }
                if("-".equals(operation)){
                    display.setText((firstValue-secondValue)+"");
                }
                if("*".equals(operation)){
                    display.setText((firstValue*secondValue)+"");
                }
                if("/".equals(operation)){
                    display.setText((firstValue/secondValue)+"");
                }
                firstValue = 0;
                operation = "+";
            }
        });
        setLayout(new BorderLayout());
        add(display, BorderLayout.NORTH);
        add(buttonPanel,BorderLayout.CENTER);
        add(buttonStart,BorderLayout.SOUTH);
        buttonPanel.add(button0);
        buttonPanel.add(button1);
        buttonPanel.add(button2);
        buttonPanel.add(button3);
        buttonPanel.add(button4);
        buttonPanel.add(button5);
        buttonPanel.add(button6);
        buttonPanel.add(button7);
        buttonPanel.add(button8);
        buttonPanel.add(button9);
        buttonPanel.add(buttonSum);
        buttonPanel.add(buttonSub);
        buttonPanel.add(buttonMul);
        buttonPanel.add(buttonBack);
        buttonPanel.add(buttonDivide);
 
        setVisible(true);
    }
 
    public static void main(String[] args) {
        new CalcFrame();
    }
}
Добавлено через 23 минуты
функция очищения была изначально...калькулятор не мой, я просто тренируюсь на нём...я пока новичок и плохо представляю по каким поисковым словам искать сие потребство
Ответ: Решение на примере операции сложения:
1) Действие на кнопку "+"
Заменить
Код Code
1
display.setText("");
На
Код Code
1
display.setText(display.getText() + "+");
2) Действие на кнопку "="
Заменить
Код Code
1
int secondValue = Integer.valueOf(display.getText());
На
Код Code
1
int secondValue = Integer.valueOf(display.getText().substring(display.getText().indexOf(operation)));
Дальше думаю разберетесь
Вопрос: Измерение времени выполнения операции

Подскажите, пожалуйста, как можно измерить время выполнения какой-либо операции?
Например время выполнения цикла?
Ответ:
Delphi_coder
function RDTSC: Int64; assembler;
asm
rdtsc
end;

супер
в мемориз