С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
 Аватар для OffyGhost
9 / 9 / 7
Регистрация: 04.03.2010
Сообщений: 107

Mailslot: Передать матрицу через клиент на сервер

01.03.2011, 14:57. Показов 6149. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать две программы – сервер и клиент.
Клиент отсылает серверу через почтовый ящик элементы введенной пользователем
квадратной матрицы, а также два введенных им числа – номер столбца и номер строки.
Сервер принимает матрицу и номер столбца N и номер строки M из почтового ящика,
выводит ее на экран, затем «вычеркивает» из матрицы столбец с номером N и строку с номером M,
выводит измененную матрицу на экран, вычисляет и выводит на экран значение ее определителя.
Вот здесь создается сервер и бесконечно ожидает, пока ему не придет матрица, N и M строчка.

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
103
104
105
106
107
108
109
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include <windows.h>
 
using namespace std;
void foo(float **matrix, int n);
void main()
{
HANDLE Mailslot;
DWORD buffer;
DWORD NumberOfBytesRead;
if ((Mailslot = CreateMailslot("\\.\\Mailslot\\slot1", 0, MAILSLOT_WAIT_FOREVER, NULL)) == INVALID_HANDLE_VALUE)
{
printf("Ошибка при создании ПЯ %d\n", GetLastError());
return;
}
        unsigned int N = 0;
        unsigned int I = 0;
        unsigned int J = 0;
 
            (ReadFile(Mailslot, buffer, 256, &NumberOfBytesRead, NULL) != 0)
        buffer = matrix [i][j];
        while 
            (ReadFile(Mailslot, buffer, 256, &NumberOfBytesRead, NULL) != 0)
        buffer = N;
        while 
            (ReadFile(Mailslot, buffer, 256, &NumberOfBytesRead, NULL) != 0)
        buffer = M;
        while 
 
 
        {
                     for (size_t i = 0, i2 = 0; i < N; ++i) {
                        for(size_t j = 0, j2 = 0; j < N; ++j) {
                                if (i != (I - 1) && j != (J - 1)) {
                                        matrix2[i2][j2++] = matrix[i][j];
                                }
                        }
                        if (i != (I - 1)) ++i2;
                }
 
                for (size_t i = 0; i < N - 1; ++i) {
                        for (size_t j = 0; j < N - 1; ++j) {
                        cout << matrix2[i][j] << "  ";
                        }
                        cout << endl << endl;
                }
                foo(matrix2, N-1);
        }
 
        for(size_t i = 0; i < N; i++)
                delete []matrix[i];
        delete []matrix;
 
        for(size_t i = 0; i < N - 1; i++)
                delete []matrix2[i];
        delete []matrix2;
        CloseHandle(Mailslot);
}
 
void foo(float **matrix, int n) {
 
        float **a = new float*[n + 1];
        for (size_t i = 0; i < n + 1; ++i) {
                a[i] = new float[n + 1];
        }
 
        for (size_t i = 0; i < n; ++i) {
                for (size_t j = 0; j < n; ++j)
                        a[i][j] = matrix[i][j];
        }
 
 
        int p = 0;
        int t,i,j,k = 0;
        float kst = 0;
        for (i=0; i<n-1; i++){
                t=1;
                while(a[i][i]==0){
                        for(j=0; j<n; j++)
                        {
                                a[i][j]=kst;
                                a[i][j]=a[i+t][j];
                                a[i+t][j]=kst;
                        }
                        p++;
                        t++;
                }
                 
                for (k=i+1; k<n; k++)
                {
                        kst=a[k][i]/(float)a[i][i];
                        for(j=0; j<n; j++)
                                a[k][j]-=a[i][j]*kst;
                }
        }
         
        kst=pow(-1.,p);
        for(i=0; i<n; i++)
                kst*=a[i][i];
 
        cout << "det = " << kst << endl;
 
        for(size_t i = 0; i < n + 1; i++)
                delete []a[i];
        delete []a;
        system("pause");
}
Ошибки таковы:
1>------ Build started: Project: lab1_server, Configuration: Debug Win32 ------
1>Compiling...
1>lab1_server.cpp
1>c:\documents and settings\admin\my documents\visual studio 2008\projects\lab1_server\lab1_server\la b1_server.cpp(13) : error C2664: 'CreateMailslotW' : cannot convert parameter 1 from 'const char [18]' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\my documents\visual studio 2008\projects\lab1_server\lab1_server\la b1_server.cpp(22) : error C2664: 'ReadFile' : cannot convert parameter 2 from 'DWORD' to 'LPVOID'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\my documents\visual studio 2008\projects\lab1_server\lab1_server\la b1_server.cpp(22) : fatal error C1903: unable to recover from previous error(s); stopping compilation
1>Build log was saved at "file://c:\Documents and Settings\Admin\My Documents\Visual Studio 2008\Projects\lab1_server\lab1_server\De bug\BuildLog.htm"
1>lab1_server - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
А это вот клиент, пишет матрицу, N, M, передаем их

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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include <windows.h>
 
using namespace std;
void foo(float **matrix, int n);
void main()
{
        unsigned int N = 0;
        unsigned int I = 0;
        unsigned int J = 0;
        int i,j;
 
HANDLE Mailslot;
DWORD BytesWritten;
CHAR ServerName[256];
 
 
if ((Mailslot = CreateFile("\\.\\Mailslot\\Slot1", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE)
    {
        printf("Создание файла с ошибкой %d\n", GetLastError());
        return;
}
 
        cout << "Enter size of matrix. N = ";
        cin >> N;
 
        int **matrix = new int*[N];
        for (size_t i = 0; i < N; ++i) {
                matrix[i] = new int[N];
        }
 
 
 
 
  cout << "Fill the matrix:\n";
        for (size_t i = 0; i < N; ++i) {
                for (size_t j = 0; j < N; ++j)
                {
                        cin >>  matrix[i][j];
                }
        }
 
if (WriteFile(Mailslot, matrix[i][j], sizeof (matrix[i][j]), &BytesWritten, NULL) == 0)
{
        printf("Запись в файл с ошибкой %d\n", GetLastError());
        return;
}
 
        cout << "Enter number of line. I = ";
        cin >> I;
 
        if (WriteFile(Mailslot, I, sizeof (I), &BytesWritten, NULL) == 0)
    {
        printf("Запись в файл с ошибкой %d\n", GetLastError());
        return;
    }
        cout << "Enter number of column. J = ";
        cin >> J;
 
        if (WriteFile(Mailslot, J, sizeof (J), &BytesWritten, NULL) == 0)
{
        printf("Запись в файл с ошибкой %d\n", GetLastError());
        return;
}
 
 
        for(size_t i = 0; i < N; i++)
                delete []matrix[i];
        delete []matrix;
        CloseHandle(Mailslot);
 }
И опятьже ошибки WinAPI:
1>------ Build started: Project: lab1_client, Configuration: Debug Win32 ------
1>Compiling...
1>lab1_client.cpp
1>c:\documents and settings\admin\my documents\visual studio 2008\projects\lab1_client\lab1_client\la b1_client.cpp(20) : error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char [18]' to 'LPCWSTR'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\my documents\visual studio 2008\projects\lab1_client\lab1_client\la b1_client.cpp(45) : error C2664: 'WriteFile' : cannot convert parameter 2 from 'int' to 'LPCVOID'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\my documents\visual studio 2008\projects\lab1_client\lab1_client\la b1_client.cpp(54) : error C2664: 'WriteFile' : cannot convert parameter 2 from 'unsigned int' to 'LPCVOID'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
1>c:\documents and settings\admin\my documents\visual studio 2008\projects\lab1_client\lab1_client\la b1_client.cpp(62) : error C2664: 'WriteFile' : cannot convert parameter 2 from 'unsigned int' to 'LPCVOID'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
1>Build log was saved at "file://c:\Documents and Settings\Admin\My Documents\Visual Studio 2008\Projects\lab1_client\lab1_client\De bug\BuildLog.htm"
1>lab1_client - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Помогите исправить
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2011, 14:57
Ответы с готовыми решениями:

MailSlot клиент-сервер передает нужное количество байт, а выводит — только первый символ
Есть MailSlot сервер (написал на консоле, ведь не принципиально). Есть MailSlot клиент - написал на WinAPI. Вводим в edit-поле данные,...

Как передать данные через mailslot?
Здравствуйте! Пишу три программы передающие данные через mailslot на winapi. Одна серверная программа, создающая другой процесс и...

Нужно передать файл, расположенный на рабочей станции, на которой выполняется сервер, на рабочую станцию​​, на которой выполняется клиент. MailSlot
Ребята. Нужна помощь. Нужно передать файл, расположенный на рабочей станции, на которой выполняется сервер, на рабочую...

6
59 / 59 / 2
Регистрация: 22.01.2011
Сообщений: 187
01.03.2011, 15:28
OffyGhost, как часто встречются такие ощибки... у тебя проект в уникоде а ты используеш тип char надо бы wchar_t.
компилятор об этом и говорит:
cannot convert parameter 1 from 'const char [18]' to 'LPCWSTR'
0
 Аватар для OffyGhost
9 / 9 / 7
Регистрация: 04.03.2010
Сообщений: 107
01.03.2011, 15:43  [ТС]
В свойствах проекта указал
No Set/Use Multi-byte -> ошибка таже самая.

Добавлено через 3 минуты
#undef UNICODE
тоже не помогает
0
59 / 59 / 2
Регистрация: 22.01.2011
Сообщений: 187
01.03.2011, 16:13
OffyGhost, у тебя ощибок очень много.
1.
C
1
2
DWORD buffer;
ReadFile(Mailslot, buffer, 256, &NumberOfBytesRead, NULL);
этот код работать не будет, я не понял сколько байт надо прочитать?
если надо 4 байта sizeof(DWORD) то:
C
1
ReadFile(Mailslot, &buffer, sizeof(DWORD), &NumberOfBytesRead, NULL)
с WriteFile таже история.
0
 Аватар для OffyGhost
9 / 9 / 7
Регистрация: 04.03.2010
Сообщений: 107
10.03.2011, 18:01  [ТС]
Исправил предыдущие ошибки, добился того, что пару символов передает, помогите реализовать передачу матрицы

сервер
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
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include <windows.h>
 
using namespace std;
void foo(float **matrix, int n);
void main()
{
HANDLE Mailslot;
int buffer;
DWORD NumberOfBytesRead;
if ((Mailslot = CreateMailslot("\\\\.\\Mailslot\\slot1", 0, MAILSLOT_WAIT_FOREVER, NULL)) == INVALID_HANDLE_VALUE)
    {
        printf("Ошибка при создании ПЯ %d\n", GetLastError());
        getchar();
        return;
    }
 
        unsigned int N = 0;
        unsigned int I = 0;
        unsigned int J = 0;
        int i,j;
        float **matrix = new float*[N];
        
 
         if (ReadFile(Mailslot, (LPVOID)&buffer, sizeof(buffer), &NumberOfBytesRead, NULL) != 0)
    {
        matrix[i][j]=buffer;
        cout << "Element= " << matrix[i][j] << endl;
    } 
 
        if (ReadFile(Mailslot, (LPVOID)&buffer, sizeof(buffer), &NumberOfBytesRead, NULL) != 0)
    {
        I=buffer;
        cout << "I= " << I << endl;
    } 
        if (ReadFile(Mailslot, (LPVOID)&buffer, sizeof(buffer), &NumberOfBytesRead, NULL) != 0)
    {
        J=buffer;
        cout << "J= " << J << endl;
    } 
 
        float **matrix2 = new float*[N - 1];
        for (size_t i = 0; i < N - 1; ++i) {
                matrix2[i] = new float[N - 1];
        }
 
        {
        
                     for (size_t i = 0, i2 = 0; i < N; ++i) 
                     {
                        for(size_t j = 0, j2 = 0; j < N; ++j)
                        {
                                if (i != (I - 1) && j != (J - 1))
                                {
                                        matrix2[i2][j2++] = matrix[i][j];
                                }
                        }
                        if (i != (I - 1)) ++i2;
                }
 
                for (size_t i = 0; i < N - 1; ++i) 
                {
                        for (size_t j = 0; j < N - 1; ++j)
                        {
                        cout << matrix2[i][j] << "  ";
                        }
                        cout << endl << endl;
                }
                foo(matrix2, N-1);
        }
 
        for(size_t i = 0; i < N; i++)
                delete []matrix[i];
        delete []matrix;
 
        for(size_t i = 0; i < N - 1; i++)
                delete []matrix2[i];
        delete []matrix2;
        CloseHandle(Mailslot);
}
 
void foo(float **matrix, int n) {
 
        float **a = new float*[n + 1];
        for (size_t i = 0; i < n + 1; ++i) {
                a[i] = new float[n + 1];
        }
 
        for (size_t i = 0; i < n; ++i) {
                for (size_t j = 0; j < n; ++j)
                        a[i][j] = matrix[i][j];
        }
 
 
        int p = 0;
        int t,i,j,k = 0;
        float kst = 0;
        for (i=0; i<n-1; i++){
                t=1;
                while(a[i][i]==0){
                        for(j=0; j<n; j++)
                        {
                                a[i][j]=kst;
                                a[i][j]=a[i+t][j];
                                a[i+t][j]=kst;
                        }
                        p++;
                        t++;
                }
                 
                for (k=i+1; k<n; k++)
                {
                        kst=a[k][i]/(float)a[i][i];
                        for(j=0; j<n; j++)
                                a[k][j]-=a[i][j]*kst;
                }
        }
         
        kst=pow(-1.,p);
        for(i=0; i<n; i++)
                kst*=a[i][i];
 
        cout << "det = " << kst << endl;
 
        for(size_t i = 0; i < n + 1; i++)
                delete []a[i];
        delete []a;
}
клиент
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
 
using namespace std;
void foo(float **matrix, int n);
void main()
{
        setlocale(LC_ALL, "Russian");
        unsigned int N = 0;
        unsigned int I = 0;
        unsigned int J = 0;
        int i,j;
 
HANDLE Mailslot;
DWORD BytesWritten;
CHAR ServerName[256];
 
 
    sprintf_s(ServerName, "\\\\%s\\Mailslot\\Slot1", ".");
    if ((Mailslot = CreateFile(ServerName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL))==INVALID_HANDLE_VALUE)
    {
        printf("error %d\n", GetLastError());
        getchar();
        return;
    }
 
 
        cout << "Enter size of matrix. N = ";
        cin >> N;
 
        int **matrix = new int*[N];
        for (size_t i = 0; i < N; ++i) {
                matrix[i] = new int[N];
        }
        
 
 
  cout << "Fill the matrix:\n";
        for (size_t i = 0; i < N; ++i) 
        {
                for (size_t j = 0; j < N; ++j)
                {
                        cin >>  matrix[i][j];
                        WriteFile(Mailslot, (LPVOID)&matrix[i][j], sizeof(matrix[i][j]), &BytesWritten, NULL);  
                }
        }
 
        cout << "Enter number of line. I = ";
        cin >> I;
 
    if (WriteFile(Mailslot, (LPVOID)&I, sizeof(I), &BytesWritten, NULL) == 0)
    {
        printf("error %d\n", GetLastError());
        getchar ();
        return;
    }
 
        cout << "Enter number of column. J = ";
        cin >> J;
 
    if (WriteFile(Mailslot, (LPVOID)&J, sizeof(J), &BytesWritten, NULL) == 0)
    {
        printf("error %d\n", GetLastError());
        getchar ();
        return;
    }
 
        for(size_t i = 0; i < N; i++)
            delete []matrix[i];
        delete []matrix;
        CloseHandle(Mailslot);
 }
0
59 / 59 / 2
Регистрация: 22.01.2011
Сообщений: 187
10.03.2011, 20:41
OffyGhost,
srv:
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
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>
 
struct mailslot_data {
    int n, m;
};
 
int main(void) {
    HANDLE slot;
    DWORD num_read_bytes = 0;
    struct mailslot_data msd;
    const char *server_name = "\\\\.\\mailslot\\myslot";
    int i, j, **matrix;
 
    if ((slot = CreateMailslot(server_name,
        0,
        MAILSLOT_WAIT_FOREVER,
        NULL)) == INVALID_HANDLE_VALUE) {
        fprintf(stderr, "error: %d", GetLastError());
        return 0;
    }
 
    fprintf(stdout, "read mailslot_data...\n");
    if (!ReadFile(slot,
        (void*)&msd, sizeof(struct mailslot_data),
        &num_read_bytes, NULL) ||
        num_read_bytes != sizeof(struct mailslot_data)) {
        fprintf(stderr, "error: %d", GetLastError());
        goto fail;
    }
 
    fprintf(stdout,
        "n %d\n"
        "m %d\n",
        msd.n, msd.m);
 
    matrix = (int**)malloc(sizeof(int*) * msd.n);
    for (i = 0; i < msd.n; i++) {
        matrix[i] = (int*)malloc(sizeof(int) * msd.n);
    }
 
    fprintf(stdout, "read data...\n");
 
    for (i = 0; i < msd.n; i++) {
        if (!ReadFile(slot,
            (void*)matrix[i], sizeof(int) * msd.n,
            &num_read_bytes, NULL) ||
            num_read_bytes != sizeof(int) * msd.n) {
                fprintf(stderr, "error: %d", GetLastError());
                goto fail;
            }
    }
 
    fprintf(stdout, "check data...\n");
    for (i = 0; i < msd.n; i++) {
        for (j = 0; j < msd.n; j++)
            fprintf(stdout, "%d", matrix[i][j]);
        fprintf(stdout, "\n");
    }
 
fail:
    if (slot != INVALID_HANDLE_VALUE)
        CloseHandle(slot);
    if (matrix) {
        for (i = 0; i < msd.n; i++) free((void*)matrix[i]);
        free((void*)matrix);
    }
    return 0;
}
clt:
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
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <windows.h>
 
struct mailslot_data {
    int n, m;
};
 
int main(void) {
    HANDLE slot;
    DWORD num_write_bytes = 0;
    struct mailslot_data msd;
    const char *server_name = "\\\\.\\mailslot\\myslot";
    int i, j, **matrix;
 
    if ((slot = CreateFile(server_name,
        GENERIC_WRITE,
        FILE_SHARE_READ,
        NULL, OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL, NULL)) == INVALID_HANDLE_VALUE) {
        fprintf(stderr, "error: %d", GetLastError());
        return 0;
    }
 
    fprintf(stdout, "enter size matrix n: ");
    scanf("%d", &msd.n);
 
    matrix = (int**)malloc(sizeof(int*) * msd.n);
    for (i = 0; i < msd.n; i++) {
        matrix[i] = (int*)malloc(sizeof(int) * msd.n);
    }
 
    fprintf(stdout, "\n");
    fprintf(stdout, "simple fill....\n");
    for (i = 0; i < msd.n; i++) {
        for (j = 0; j < msd.n; j++)
            matrix[i][j] = i; // simple fill
    }
 
    fprintf(stdout, "\n");
    fprintf(stdout, "enter number of line m: ");
    scanf("%d", &msd.m);
 
    if (!WriteFile(slot,
        (void*)&msd, sizeof(struct mailslot_data),
        &num_write_bytes, NULL) ||
        num_write_bytes != sizeof(struct mailslot_data)) {
        fprintf(stderr, "error: %d", GetLastError());
        goto fail;
    }
 
    for (i = 0; i < msd.n; i++) {
        if (!WriteFile(slot,
            (void*)matrix[i], sizeof(int) * msd.n,
            &num_write_bytes, NULL) ||
            num_write_bytes != sizeof(int) * msd.n) {
                fprintf(stderr, "error: %d", GetLastError());
                goto fail;
            }
    }
 
    fprintf(stdout, "\n");
    fprintf(stdout, "success!");
 
fail:
    if (slot != INVALID_HANDLE_VALUE)
        CloseHandle(slot);
    if (matrix) {
        for (i = 0; i < msd.n; i++) free((void*)matrix[i]);
        free((void*)matrix);
    }
    return 0;
}
1
 Аватар для OffyGhost
9 / 9 / 7
Регистрация: 04.03.2010
Сообщений: 107
17.03.2011, 18:15  [ТС]
Полностью рабочий вариант:
Может кому пригодится

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
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include <windows.h>
 
using namespace std;
void foo(float **matrix, int n);
void main()
{
    setlocale(LC_ALL, "Russian");
    HANDLE Mailslot;
    int buffer,i,j;
    unsigned int N,I,J = 0;
    DWORD NumberOfBytesRead;
    if ((Mailslot = CreateMailslot("\\\\.\\Mailslot\\slot1", 0, MAILSLOT_WAIT_FOREVER, NULL)) == INVALID_HANDLE_VALUE)
    {
        printf("Ошибка при создании ПЯ %d\n", GetLastError());
        getchar();
        return;
    }
    if (ReadFile(Mailslot, (LPVOID)&buffer, sizeof(buffer), &NumberOfBytesRead, NULL) != 0)
    {
        N=buffer;
        cout << "Размер пересылаемой квадратной матрицы= " << N << endl;
    }
        int **matrix23 = new int*[N];
        for (size_t i = 0; i < N; ++i) {
                matrix23[i] = new int[N];
        }
    for (size_t i = 0; i < N; ++i) 
    {
        for (size_t j = 0; j < N; ++j)
            {
                if (ReadFile(Mailslot, (LPVOID)&buffer, sizeof(buffer), &NumberOfBytesRead, NULL) != 0)
                {
                matrix23[i][j]=buffer;
                cout << "Клиент успешно переслал элемент матрицы...= " << matrix23[i][j] << endl;
                }
            }
    }
    cout << "\nИзначальная матрица... \n";
    for (size_t i = 0; i < N; ++i) 
    {
        for (size_t j = 0; j < N; ++j) 
        {
            cout << matrix23[i][j] << "  ";
        }
        cout << endl << endl;
    }
    if (ReadFile(Mailslot, (LPVOID)&buffer, sizeof(buffer), &NumberOfBytesRead, NULL) != 0)
    {
        I=buffer;
        cout << "Вычеркиваем строчку " << I << endl;
    } 
    if (ReadFile(Mailslot, (LPVOID)&buffer, sizeof(buffer), &NumberOfBytesRead, NULL) != 0)
    {
        J=buffer;
        cout << "Вычеркиваем столбец " << J << endl;
    } 
    float **matrix2 = new float*[N - 1];
    for (size_t i = 0; i < N - 1; ++i) 
    {
                matrix2[i] = new float[N - 1];
    }
    {
        for (size_t i = 0, i2 = 0; i < N; ++i) 
        {   
           for(size_t j = 0, j2 = 0; j < N; ++j)
            {
             if (i != (I - 1) && j != (J - 1))
                {
                    matrix2[i2][j2++] = matrix23[i][j];
                }
           }
            if (i != (I - 1)) ++i2;
        }
 
    cout << "\nПреобразованная матрица... \n";
    for (size_t i = 0; i < N - 1; ++i) 
    {
        for (size_t j = 0; j < N - 1; ++j)
        {
            cout << matrix2[i][j] << "  ";
        }
    cout << endl << endl;
    }
        foo(matrix2, N-1);
    }
 
        for(size_t i = 0; i < N; i++)
                delete []matrix23[i];
        delete []matrix23;
 
        for(size_t i = 0; i < N - 1; i++)
                delete []matrix2[i];
        delete []matrix2;
        getchar();
        CloseHandle(Mailslot);
}
 
void foo(float **matrix, int n) {
 
    float **a = new float*[n + 1];
    for (size_t i = 0; i < n + 1; ++i) 
    {
        a[i] = new float[n + 1];
    }
    for (size_t i = 0; i < n; ++i) 
    {
        for (size_t j = 0; j < n; ++j)
            a[i][j] = matrix[i][j];
    }
 
    int p = 0;
    int t,i,j,k = 0;
    float kst = 0;
    for (i=0; i<n-1; i++)
    {
        t=1;
        while(a[i][i]==0)
        {
            for(j=0; j<n; j++)
            {
                a[i][j]=kst;
                a[i][j]=a[i+t][j];
                a[i+t][j]=kst;
            }
                p++;
                t++;
        }
        for (k=i+1; k<n; k++)
        {
            kst=a[k][i]/(float)a[i][i];
            for(j=0; j<n; j++)
            a[k][j]-=a[i][j]*kst;
        }
    }
 
    kst=pow(-1.,p);
    for(i=0; i<n; i++)
        kst*=a[i][i];
    cout << "Определитель = " << kst << endl;
         for(size_t i = 0; i < n + 1; i++)
                delete []a[i];
        delete []a;
}
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
 
 
using namespace std;
void foo(float **matrix, int n);
void main()
{
    setlocale(LC_ALL, "Russian");
    unsigned int N,I,J = 0;
    int i,j;
    HANDLE Mailslot;
    DWORD BytesWritten;
    CHAR ServerName[256];
    sprintf_s(ServerName, "\\\\%s\\Mailslot\\Slot1", ".");
    if ((Mailslot = CreateFile(ServerName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL))==INVALID_HANDLE_VALUE)
    {
        printf("Ошибка открытия слота %d\n", GetLastError());
        getchar();
        return;
    }
    int k=0;
    while(k==0)
    {
        printf("\nВведите размер матрицы (от 2 до 20): N=");
        cin >> N;
        if ((N<2) || (N>20)) k=0;
        else k=1;
    }
    if (WriteFile(Mailslot, (LPVOID)&N, sizeof(N), &BytesWritten, NULL) == 0)
    {
        printf("Ошибка отправки %d\n", GetLastError());
        getchar ();
        return;
    }
    int **matrix = new int*[N];
    for (size_t i = 0; i < N; ++i)
        {
            matrix[i] = new int[N];
        }
    cout << "Заполните элементы матрицы (строчно или поэлементно):\n";
        for (size_t i = 0; i < N; ++i) 
        {
                for (size_t j = 0; j < N; ++j)
                {
                        cin >>  matrix[i][j];
                        WriteFile(Mailslot, (LPVOID)&matrix[i][j], sizeof(matrix[i][j]), &BytesWritten, NULL);
                        getchar ();
                }
        }
    k=0;
    while(k==0)
    {
        cout << "Какую строчку вычеркнуть? I = ";
        cin >> I;
            if (I>N) k=0;
            else k=1;
    }
    if (WriteFile(Mailslot, (LPVOID)&I, sizeof(I), &BytesWritten, NULL) == 0)
    {
        printf("Ошибка записи %d\n", GetLastError());
        getchar ();
        return;
    }
    k=0;
    while(k==0)
    {
        cout << "Какой столбец вычеркнуть? J = ";
        cin >> J;
            if (J>N) k=0;
            else k=1;
    }
    if (WriteFile(Mailslot, (LPVOID)&J, sizeof(J), &BytesWritten, NULL) == 0)
    {
        printf("Ошибка записи %d\n", GetLastError());
        getchar ();
        return;
    }
        for(size_t i = 0; i < N; i++)
            delete []matrix[i];
        delete []matrix;
        CloseHandle(Mailslot);
 }
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2011, 18:15
Помогаю со студенческими работами здесь

Клиент-сервер, передать строку с клиента на сервер
Подскажите плиз Есть код он передает серверу то что мы пишем с клавиатуры а как передать строку без использования клавиатуры чет...

Клиент-сервер. Как передать массив?
Есть клиент сервер... Нужно передать массив данных с сервера на клиент и на стороне клиента вывести данные в текст букс... Код...

Клиент-Сервер: как передать информацию больше буфера
Отправляю сообщения на клиент: public void SendAsync(string data) { byte sbuff =...

Как получить и передать информацию о пользователях Windows в приложении клиент-сервер?
Всем доброго времени суток. Возник вопрос по клиент-серверному приложению на сокетах, заключается он вот в чем: Как на удаленном сервере...

OLE. Access -клиент, Word - сервер. Работает через раз. "Сервер не валиден!"
Задача: получить путь прилинкованного файла. Тип OLE - связанный Рамка объекта - присоединенная Me.ПрисоединенныйOLE1.Action =...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru