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

QBasic/QuickBASIC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CLS
PRINT "                         Proekt benzokolonki"
PRINT
 
PRINT "Cena minimum"
PRINT
DIM bk$(10), top$(10), cena(10)
bk$(1) = "BashNeft'": top$(1) = "A95": cena(1) = 33
bk$(2) = "Lukoil": top$(2) = "A95": cena(2) = 30
bk$(3) = "TatNeft'": top$(3) = "A95": cena(3) = 20
bk$(4) = "SurgutNG": top$(4) = "A95": cena(4) = 31
bk$(5) = "MoscowTK": top$(5) = "A95": cena(5) = 35
bk$(6) = "BashNeft'": top$(6) = "A92": cena(6) = 30
bk$(7) = "Lukoil": top$(7) = "A92": cena(7) = 30
bk$(8) = "TetNeft'": top$(8) = "A92": cena(8) = 31
bk$(9) = "SurgutNG'": top$(9) = "A92": cena(9) = 30
bk$(10) = "MoscowTK": top$(10) = "A95": cena(10) = 31
 
INPUT "Marka benz", top$
min = cena(1)
FOR n = 1 TO 10
    IF min > cena(n) THEN min = cena(n): nz = n
NEXT n
PRINT bk$(nz), top$(nz), cena(nz)
нужно сделать выборку по определенному типу топлива и найти минимальную цену этого топлива
как я понял не хватает в строчке нахождения минимума оператора AND и еще одного критерия .
Подскажите пожалуйста.
Ответ: Условие такое. (Для ваших обозначений)
QBasic/QuickBASIC
1
IF min > cena(n) AND top2$ = top$(n) THEN min = cena(n): nz = n
Но есть одно НО! В строке 19 ошибка.
Вы вели переменную, имя которой совпадает с именем массива!
Вот и условие будет неверным. Правильнее переменную назвать
top2$ - что я и сделал в приведенном выше примере.
Вопрос: В двухмерном массиве сделать строки столбцами, столбцы строками

Дан квадратный массив размерностью n на n. Нужно сделать строки столбцами, а столбцы строками
Ответ:
Код 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
program ex;
const n = 5;
var a,b:array[1..n,1..n]of integer;
i,j:integer;
 
begin
for i:=1 to n do
  for j:=1 to n do
  begin
  a[i,j]:=random(9);
  b[j,i]:=a[i,j];
  end;
  
writeln('Исходная матрица: ');
for i:=1 to n do
  begin
  for j:=1 to n do
    write(a[i,j]:3);
  writeln()
  end;
writeln();
 
writeln('Измененная матрица: ');
for i:=1 to n do
  begin
  for j:=1 to n do
    write(b[i,j]:3);
  writeln()
  end;
end.
Вопрос: Нужно сделать БД (msql) под windows на C#

Нужно сделать БД (msql), ПО под windows на C# 

Как вариант с использованием компонентов devexpress.  
Пишите запрос на odan123@yandex.ru  
Заказчик (не посредник) пришлю ТЗ. 
Работа не простая. 

Если сообщение не для этого раздела, просьба к модератору перенести куда нужно.

Это сообщение отредактировал(а) odan1 - 21.11.2016, 18:33
Ответ:
Нужно сделать БД (msql), ПО под windows на C# 

Как вариант с использованием компонентов devexpress.  
Пишите запрос на odan123@yandex.ru  
Заказчик (не посредник) пришлю ТЗ. 
Работа не простая. 

Если сообщение не для этого раздела, просьба к модератору перенести куда нужно.

Это сообщение отредактировал(а) odan1 - 21.11.2016, 18:33
Вопрос: Как сделать выборку?

Код PHP
1
$data = $this->crud->select('dohod' , array('username'=>$name));
есть вот этот код, который берет из базы данных дату, но когда значений по этому логину больше 1 в SQL код берет только первое значение. Как сделать выборку (сортировку) по id, чтобы оно брало последнее значение?
Ответ:
Цитата Сообщение от 97mik Посмотреть сообщение
$this->db->order_by("id", "asc");
Это по возрастанию, а Вам по убыванию нужно
Код PHP
1
$this->db->order_by("id", "desc");
Вопрос: Нужно сделать проверку (выходит ли введенный код в массив или нет, если нет то нужно заново запросить ввести к

Помогите пожалуйста . Нужно сделать проверку (выходит ли введенный код в массив или нет, если нет то нужно заново запросить ввести код)

Вот программа:

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
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
var 
q, h: array of integer; 
 
Text, Text_1, Text_2, text_3, S: String; 
 
i, j, kolsimvolov: integer; 
key1: array of Byte; 
key2: array of Byte; 
p, m,t: Boolean; 
r, b: integer; 
Textmatr: Array of array of Char; 
c:char; 
 
begin 
 
repeat 
writeln('Выберите действие'); 
writeln('1-зашифровать текст'); 
writeln('2-расшифровать текст'); 
writeln('другое - выход'); 
readln(c); 
 
write('введите кол-во строк в матрице : '); 
readln(r); 
write('введите кол-во столбцов в матрице : '); 
readln(b); 
//--— 
setlength(q, r); 
setlength(h, b); 
setlength(key1, r); 
setlength(key2, b); 
setlength(Textmatr, r, b); 
 
 
repeat 
Write('введите текст для кодировки: '); 
Readln(Text); 
kolsimvolov:=Length(text); 
m := (kolsimvolov <= r * b); 
if not(m) then 
writeln('Кол-во символов не должно привышать r*b '); 
until m; 
 
Repeat 
Writeln('Введите ключ 1 , состоящий из ',r,' символов, через "Enter"'); 
for i:=0 to r-1 do 
Readln(key1[i]); 
p:=true; 
for i:=0 to r-1 do 
for j:=i+1 to r-1 do 
if (key1[i] = key1[j]) then 
p := False; 
If Not(p) then 
writeln('Все символы должны быть различны!'); 
Until p; 
Repeat 
Writeln('Введите ключ 2, состоящий из ',b,' символов, через "Enter"'); 
for i:=0 to b-1 do 
Readln(key2[i]); 
t:=true; 
 
for i:=0 to b-1 do 
for j:=i+1 to b-1 do 
if (key2[i]=key2[j]) then 
t:=false; 
If Not(t) then 
writeln('Все символы должны быть различны!'); 
 
Until t; 
 
Writeln; 
//----------------------------------------------------— 
for i := 0 to r - 1 do 
for j := 0 to b - 1 do 
begin 
//OutPutDebugString(PWideChar(inttostr(i)+' '+inttostr(j))); 
if i * b + j + 1 <= Length(Text) then 
Textmatr[key1[i] - 1, j] := Text[(i) * b + j + 1] 
else 
Textmatr[key1[i] - 1, j] := ' '; 
end; 
Writeln(' k1\k2 '); 
For i:=0 to r-1 do 
begin 
Write(' ',i,' '); 
For j:=0 to b-1 do 
write(' ',textmatr[i,j],' '); 
Writeln; 
end; 
case c of 
'1': 
begin 
//----------------------------------------------------— 
Text_1:=''; 
For j:=0 to b-1 do 
for i:=0 to r-1 do 
begin 
S:=textmatr[i,key2[j]-1]; 
Text_1:=Text_1+S; 
end; 
Writeln('Закодированный текст:',' ',text_1); 
end; 
//-----------------------------------------------------— 
'2': 
begin 
Text_2:=''; 
For j:=0 to b-1 do 
begin 
S:=Copy(Text_1,(key2[j]-1)*r+1,r); 
Text_2:=Text_2+S; 
end; 
Text_3:=''; 
For i:=0 to r-1 do 
For j:=0 to b-1 do 
begin 
S:=Copy(Text_2,(j)*r+key1[i],1); 
Text_3:=Text_3+S; 
end; 
Writeln('Раскодированный текст:',' ',Text_3); 
//-----------------------------------------------------— 
write('Нажмите Enter'); 
Readln; 
End; 
else 
begin 
writeln('Программа завершена'); 
//exit; 
end; 
end; 
until not (c in ['1', '2']); 
end.
Ответ:
var key1:= ReadString('Введите ключ №1, состоящий из '{ + r.ToString() + }'символов: ').Select(x -> byte.Parse(x)).ToArray();
Читаем строку символов, и преобразовываем их в тип byte.
var buff:= key1.Select(x -> key1.Where(y -> y = x).Count() > 1);
Формируем массив buff, преобразуя каждый элемент key1 в true, если символ не уникален(есть повторения) и в false иначе
foreach var x in buff do
begin
if x = true
then
begin
NotRepetedElementsFlag:= false;
Writeln('Повторите ввод. Все символы должны бить различны.');
break;
end;
end;
Выводим строку, если есть хотя бы один повторяющийся символ.

Добавлено через 17 минут
Сделал по другому(т.к. byte.parse() чет не оч. в select()). У меня, когда я в ваш код интегрирую, ошибка компиляции вылетает.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Writeln('Введите ключ 1 , состоящий из ',r,' символов, через "Enter"');
    var NotRepetedElementsFlag: boolean;
    repeat
      NotRepetedElementsFlag:= true;
      for var Counter:= 0 to key1.Length - 1 do
        begin
          Writeln('Введите элемент №' + Counter.ToString() + ': ');
          read(key1[Counter]);
        end;
      if (key1.Select(x -> key1.Where(y -> y = x).Count() > 1).Where(x -> x = true).Count() > 0)
        then
          begin
            NotRepetedElementsFlag:= false;
            Writeln('Повторите ввод. Все символы должны бить различны.');
          end;
    until NotRepetedElementsFlag;
Вопрос: Нужно сделать анимацию движения нарисованного стула

Здравствуйте! Я написал программу, рисующую стул, и нужно сделать так, чтобы этот стул просто перемещался по форме слева направо. Я не знаю, как сделать эту анимацию. Собственно, вот сама программа:
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
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
with form1.Canvas do
begin
pen.Color:=clBlack;
 
MoveTo(100,300); //основание
LineTo(150,250);
LineTo(250,250);
LineTo(200,300);
LineTo(100,300);
 
MoveTo(150,250); //спинка
LineTo(150,150);
LineTo(250,150);
LineTo(250,250);
LineTo(150,250);
 
MoveTo(140,300); //1 ножка
LineTo(140,350);
LineTo(150,350);
LineTo(160,340);
LineTo(160,300);
MoveTo(150,350);
LineTo(150,300);
 
MoveTo(250,250); //2 ножка
LineTo(250,350);
LineTo(240,360);
LineTo(230,360);
LineTo(230,270);
MoveTo(240,360);
LineTo(240,260);
 
MoveTo(210,290); //3 ножка
LineTo(210,390);
LineTo(200,400);
LineTo(190,400);
LineTo(190,300);
MoveTo(200,300);
LineTo(200,400);
 
MoveTo(100,300); //4 ножка
LineTo(100,400);
LineTo(110,400);
LineTo(120,390);
LineTo(120,300);
MoveTo(110,400);
LineTo(110,300);
 
end;
end;
end.
Помогите, пожалуйста!
Ответ: Да. Кое-что поясню.

Всё пошагово, для новичков:
Code
1
2
3
4
5
6
7
8
9
10
11
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    procedure DrawMyChair(C: TCanvas; const X: Integer; const Y: Integer); // добавляем сюда вот это, ставим каретку на эту строку и нажимаем Ctrl+Shift+C
  public
    { Public declarations }
  end;
После Ctrl+Shift+C среда сама создаст фрагмент кода и перебросит на него:
Code
1
2
3
4
procedure TForm1.DrawMyChair(C: TCanvas; const X, Y: Integer);
begin
 
end;
В переводе: Draw - рисовать, My - мой, Chair - стул. Вот там занимаемся рисованием стула. Только стула. Только рисованием. Только на "C" и только в координатах X, Y.
Как-то так:
Code
1
2
3
4
5
6
7
procedure TForm1.DrawMyChair(C: TCanvas; const X, Y: Integer);
begin
C.Pen.Color:=clBlack;
C.MoveTo(X, Y);
C.LineTo(X+50,Y-50);
...
end;
Вызывать нужно только в OnPaint окна, предварительно заблокировав холст:
Code
1
2
3
4
5
6
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Lock;
DrawMyChair(Canvas, 100, 300);
Canvas.UnLock;
end;
И вот заготовка работает! Но надо же в разных координатах? Точнее пока только менять (передвигать)?
Ну раз так делаем дальше:
Code
1
2
3
4
5
6
7
8
9
10
11
12
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    MyChairPos: TPoint; // добавили переменную "позиция стула", как поле класса, глобальную переменную было бы некорректно
    procedure DrawMyChair(C: TCanvas; const X: Integer; const Y: Integer);
  public
    { Public declarations }
  end;
Тогда надо при создании окна заполнять нашу переменную начальным значением, в OnCreate:
Code
1
2
3
4
5
procedure TForm1.FormCreate(Sender: TObject);
begin
MyChairPos.X:=100; // перенесли число из OnPaint
MyChairPos.Y:=300; // перенесли число из OnPaint
end;
А в самом OnPaint меняем так:
Code
1
2
3
4
5
6
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Lock;
DrawMyChair(Canvas, MyChairPos.X, MyChairPos.Y);
Canvas.UnLock;
end;
И в таймере просто меняем значения MyChairPos и вызываем Refresh;
Вопрос: Нужно сделать сохранение значения label в файл и обратную загрузку значений в label

Нужно сделать так, чтобы при нажатии на кнопку "Сохранить", мои 5 надписей на странице были сохранены в текстовый файл. А при нажатии на кнопку "Загрузить", все те данные, которые мы сохранили были выведены в те же label. На фото не видно, но там правее еще есть label. Вот нужно их значения сохранять и выводить. Надеюсь хоть тут помогут
Ответ: Мне просто очень нужно решение.

Добавлено через 7 часов 26 минут
АУУУ.... КТО НИТЬ ОТЗОВИТЕСЬ! Мне очень нужно, скоро сдавать проект(сайт). Может кто-то сможет просто доступно объяснить?
Вопрос: Создать меню, в котором пользователь сам сможет выбирать, что ему нужно сделать, пока не нажмет кнопку выхода

Всем доброго времени суток! Есть небольшая проблема с меню в С++. Задача: создать меню, по которому пользователь сам сможет выбирать, что ему нужно сделать, пока не нажмет кнопку выхода.
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
int count, count2;
    double Real1, Im1, Real2, Im2;
    do
    {
        cout << "Menu\n";
        cout << "1. Create complex\n";
        cout << "2. Addition\n";
        cout << "3. Subtraction\n";
        cout << "4. Multiplication\n";
        cout << "5. Division\n";
        cout << "6. Cout <<\n";
        cout << "0. End\n";
        cin >> count;
        switch (count)
        {
        case 1:
        {
            cout << "1. Enter first complex\n2.Enter second complex\n";
            cin >> count2;
            if (count2 == 1)
            {
                cout << "Enter Real and Im\n";
                cin >> Real1 >> Im1;
                Complex value1(Real1, Im1);
            }
            if (count2 == 2)
            {
                cout << "Enter Real and Im\n";
                cin >> Real2 >> Im2;
                Complex value2(Real2, Im2);
            }
            break;
        }
        case 2: cout << "Not ready\n";
        case 3: cout << "Not ready\n";
        case 4: cout << "Not ready\n";
        case 5: cout << "Not ready\n";
        case 6: cout << value1 << valu2;
        default:
            break;
        }
    } while (count != 0);
Проблема в том, что он не видит value1 и value2, которые я ввожу в первом case. Помогите пожалуйста, может можно как-то открыть видимость на эти переменные? или меню может как-то по другому реализоваться?
Буду рад за помощь!
Ответ: Я вроде так и сделал)
Вопрос: Сортировка таблицы по нескольким столбцам в датагрид

Доброго времени суток!
Я загружаю экселевский файл в датагрид
Кликните здесь для просмотра всего текста
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
private void button1_Click(object sender, EventArgs e)
        {
            //поиск файла Excel
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Multiselect = false;
            ofd.DefaultExt = "*.xls;*.xlsx";
            ofd.Filter = "Microsoft Excel (*.xls*)|*.xls*";
            ofd.Title = "Выберите документ Excel";
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                MessageBox.Show("Вы не выбрали файл для открытия", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            string xlFileName = ofd.FileName; //имя нашего Excel файла
 
            //рабоата с Excel
            Excel.Range Rng;
            Excel.Workbook xlWB;
            Excel.Worksheet xlSht;
            int iLastRow, iLastCol;
 
            Excel.Application xlApp = new Excel.Application(); //создаём приложение Excel
            xlWB = xlApp.Workbooks.Open(xlFileName); //открываем наш файл           
            xlSht = xlWB.Worksheets["Лист1"]; //или так xlSht = xlWB.ActiveSheet //активный лист
 
            iLastRow = xlSht.Cells[xlSht.Rows.Count, "A"].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А
            iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке
 
            Rng = (Excel.Range)xlSht.Range["A1", xlSht.Cells[iLastRow, iLastCol]]; //пример записи диапазона ячеек в переменную Rng
                                                                                   //Rng = xlSht.get_Range("A1", "B10"); //пример записи диапазона ячеек в переменную Rng
                                                                                   //Rng = xlSht.get_Range("A1:B10"); //пример записи диапазона ячеек в переменную Rng
                                                                                   //Rng = xlSht.UsedRange; //пример записи диапазона ячеек в переменную Rng
 
            var dataArr = (object[,])Rng.Value; //чтение данных из ячеек в массив            
                                                //xlSht.get_Range("K1").get_Resize(dataArr.GetUpperBound(0), dataArr.GetUpperBound(1)).Value = dataArr; //выгрузка массива на лист
 
            //закрытие Excel
            xlWB.Close(true); //сохраняем и закрываем файл
            xlApp.Quit();
            releaseObject(xlSht);
            releaseObject(xlWB);
            releaseObject(xlApp);
 
            //заполняем DataTable для последующего заполнения dataGridView
            DataTable dt = new DataTable();
            DataRow dtRow;
            //добавляем столбцы в DataTable
            for (int i = 1; i <= dataArr.GetUpperBound(1); i++)
                dt.Columns.Add((string)dataArr[1, i]);
 
            //цикл по строкам массива
            for (int i = 2; i <= dataArr.GetUpperBound(0); i++)
            {
                dtRow = dt.NewRow();
                //цикл по столбцам массива
                for (int n = 1; n <= dataArr.GetUpperBound(1); n++)
                {
                    dtRow[n - 1] = dataArr[i, n];
                }
                dt.Rows.Add(dtRow);
            }
 
            this.dataGridView1.DataSource = dt; //заполняем dataGridView
 
            MessageBox.Show("Конец", "Внимание", MessageBoxButtons.OK, MessageBoxIcon.Information);
 
        
    }
        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Unable to release the Object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }

Получается такая картинка(см. Картинка 1)
Нужно сделать выборку по этому датагриду по нескольким столбцам.
Например я выбираю сначала услугу газ, у меня остаются строки где услуга только газ.
Далее я выбираю дом 22 например и у меня остаются те же строки с услугой газ, но плюс к этому происходит выборка по дому 22.
Ответ: Creativchik, Вам нужно использовать .
После заполнения DataTable:
C#
1
2
var dv = new DataView(dt);
this.dataGridView1.DataSource = dv; //заполняем dataGridView
А у DataView уже можно использовать свойства или RowFilter или все вместе.
Вопрос: Как сделать выборку вертикального столбца в mysql

Здравствуйте господа ни как не могу разобраться во вроде бы простой задаче.
Дано. Таблица рис.1
Код:
PHP
1
2
3
4
5
6
$query = mysql_query("SELECT `id` FROM `users`");
$sum = mysql_num_rows($query);
$id =  mysql_fetch_array($query);
for($i=0; $i<$sum; $i++){
     echo $id[$i]; // 3
}
Так вот, задача такая, поместить id - шники из вертикального столбца в массив и вывести их в цикле.
В моем примере выводит только '3', а id ниже он же четвертый не выводит.
Как сделать выборку вертикальных столбцов не пойму? Горизонтальные поля выводить умею, а вертикальные не выходит ни как при моей схеме.
Ответ: miketomlin, я постеснялся показаться глупым . Да действительно, сейчас понял, что выше тоже самое что и ваш код.