Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
2 / 2 / 0
Регистрация: 04.11.2020
Сообщений: 220

Не компилируется шейдерная программа. Ошибка: error C5145: must write to gl_Position

22.05.2021, 19:59. Показов 6006. Ответов 26

Студворк — интернет-сервис помощи студентам
Написал класс шейдера по урокам на хабре. При компиляции шейдерной программы происходит ошибка
Code
1
error C5145: must write to gl_Position
Сколько ни пытался понять, причину ошибки установить не удалось. Сверял с кодом из уроков. Шейдеры у меня немного отличаются, но заменив их на те что с хабра, проблема не устранилась. Программа рисует чёрный треугольник. Буду очень признателен за помощь.

Shader.cpp
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
#include "Shader.h"
 
Shader::Shader(const GLchar* vertexPath, const GLchar* fragmentPath) {
    std::cout << "Shader creating started\n";
    std::string vertexCode;
    std::string fragmentCode;
    std::ifstream vShaderFile;
    std::ifstream fShaderFile;
 
    vShaderFile.exceptions (std::ifstream::badbit);
    fShaderFile.exceptions (std::ifstream::badbit);
 
    try{
        vShaderFile.open(vertexPath);
        fShaderFile.open(fragmentPath);
        std::stringstream vShaderStream, fShaderStream;
 
        vShaderStream << vShaderFile.rdbuf();
        fShaderStream << fShaderFile.rdbuf();
 
        vShaderFile.close();
        fShaderFile.close();
 
        vertexCode = vShaderStream.str();
        fragmentCode = fShaderStream.str();
    }
    catch (std::ifstream::failure e) {
        std::cout << "ERROR! Shader reading filed! (Shader.cpp)\n";
    }
 
    const GLchar * vShaderCode = vertexCode.c_str();
    const GLchar * fShaderCode = fragmentCode.c_str();
 
    //Shader building
 
    GLuint vertex;
    GLuint fragment;
    //crash log
    GLint success;
    GLchar infoLog[512];
 
    //vertex shader
    vertex = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertex, 1, &vShaderCode, NULL);
    glCompileShader(vertex);
    //check errors
    glGetShaderiv(vertex, GL_COMPILE_STATUS, &success);
    if(!success)
    {
        glGetShaderInfoLog(vertex, 512, NULL, infoLog);
        std::cout << "ERROR! Vertex shader building filed! (Shader.cpp) \n" << infoLog << std::endl;
    }
 
    //fragment shader
    fragment = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragment, 1, &fShaderCode, NULL);
    glCompileShader(fragment);
    //check errors
    glGetShaderiv(fragment, GL_COMPILE_STATUS, &success);
    if(!success)
    {
        glGetShaderInfoLog(fragment, 512, NULL, infoLog);
        std::cout << "ERROR! Fragment shader building filed! (Shader.cpp)\n" << infoLog << std::endl;
    }
 
    //ShaderProgram
    this->Program = glCreateProgram();
    glAttachShader(this->Program, vertex);
    glAttachShader(this->Program, fragment);
    glLinkProgram(this->Program);
    //errors check
    glGetProgramiv(this->Program, GL_LINK_STATUS, &success);
    if(!success)
    {
        glGetProgramInfoLog(this->Program, 512, NULL, infoLog);
        std::cout << "ERROR! Shader program linking filed! (Shader.cpp)\n" << infoLog << std::endl;
    }
 
    glDeleteShader(vertex);
    glDeleteShader(fragment);
}
 
Shader::Shader() {
    std::cout << "WARNING! If you're using default constructor of shader, you must be using other constructor later (Shader.cpp)\n";
}
 
void Shader::Use() {
    glUseProgram(this->Program);
}
StandartShader.frag
glSlang
1
2
3
4
5
6
7
8
9
#version 330 core
out vec4 FragColor;
 
in vec4 vertexColor;
 
void main()
{
    FragColor = vec4(0.3f, 0.7f, 0.2f, 1.0f);
}
StandartShader.vert
glSlang
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#version 330 core
layout (location = 0) in vec3 aPos;
 
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
 
out vec4 vertexColor;
 
void main()
{
    vertexColor = vec4(0.3, 0.5, 0.5, 1.0);
    gl_Position = projection * view * model * vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
Mesh.Draw()
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
void Mesh::Draw() {
    meshShader.Use();
 
    // Create transformations
    glm::mat4 model;
    glm::mat4 view;
    glm::mat4 projection;
    model = glm::rotate(model, -55.0f, glm::vec3(1.0f, 0.0f, 0.0f));
    view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f));
    projection = glm::perspective(45.0f, (GLfloat)800 / (GLfloat)600, 0.1f, 100.0f);
    // Get their uniform location
    GLint modelLoc = glGetUniformLocation(meshShader.Program, "model");
    GLint viewLoc = glGetUniformLocation(meshShader.Program, "view");
    GLint projLoc = glGetUniformLocation(meshShader.Program, "projection");
 
    // Pass them to the shaders
    glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
    glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
 
    glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));
 
    glBindVertexArray(VAO);
    std::cout << "dd2\n";
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
    glBindVertexArray(0);
    glUseProgram(0);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2021, 19:59
Ответы с готовыми решениями:

Не компилируется программа, ошибка illegal expression, syntax error
Помогите, в чем проблема program Primifthenelsecaseof; {$APPTYPE CONSOLE} uses SysUtils, Math; var y1, y2, y3, x: Real; ...

Ошибка при добавлении в файл. Ошибка 101: Ошибка записи на диск (Error 101: Disk write error).
Здравствуйте, возникла проблема такого плана. Нужно произвести добавление записи в файл, но после успешного создания и чтения вылазиет...

Upload и Write to file failed. Ошибка: ADODB.Stream error '800a0bbc' Write to file failed.
Проблема вот в чем. Есть 3 компонента, и в админе каждого есть возможность загрузки файлов. Используют они экземпляры одного и того же...

26
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
24.05.2021, 23:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Maksim1307 Посмотреть сообщение
Что с ними не так?
Ну вот я показываю, какие шейдеры компилируются в проекте, который я скачал по ссылке из поста 15:
glSlang
1
2
3
4
5
6
7
8
9
10
11
12
13
#version 330 core
layout (location = 0) in vec3 aPos;
 
uniform mat4 transform;
 
out vec4 vertexColor;
 
void main()
{
    vertexColor = vec4(0.3, 0.5, 0.5, 1.0);
    gl_Position = transform * vec4(aPos.x, aPos.y, aPos.z, 1.0);
    //gl_Position = vec4(aPos.xyz, 1.0f);
}
glSlang
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
#version 330 core
out vec4 FragColor;
 
in vec3 ourColor;
in vec2 TexCoord;
 
// texture sampler
uniform sampler2D texture1;
 
void main()
{
    FragColor = texture(texture1, TexCoord);
}
 
//#version 330 core
//out vec4 FragColor;
//
//in vec3 vertexColor;
//in vec2 TexCoord;
//
//uniform sampler2D texture1;
//
//void main()
//{
//    //FragColor = vertexColor;
//    FragColor =  texture(texture1, TexCoord);
//}
ничего не смущает?
Цитата Сообщение от Maksim1307 Посмотреть сообщение
Видимо, никуда. Мне казалось, что здесь:
Нет, здесь просто спецификация вершин. Этот вызов означает примерно следуещее:
Для атрибута с индексом 0 (первый параметр, (location = 0) в программе)
брать данные из буфера, который сейчас привязан к GL_ARRAY_BUFFER,
начиная со смещения 0 байт (6 параметр),
интерпретировать байты как float (3 параметр) в количестве 3 штук (второй параметр),
без нормализации (4 параметр, тебе не нужна, т.к. это для целочисленных данных в буфере).
Смещение между атрибутом каждой вершины в байтах указывается 5 параметром, в твоём случае атрибуты последовательны, т.е. можно указать 0, но вообще 3 * sizeof(float) или sizeof(Vector3<float>))

Массив текстурных координат нужно тоже загружать в буфер, а иначе откуда их возьмет шейдер. Можешь загрузить всё в один буфер(вычисляешь необходимый размер буфера, записываешь сначала позиции, потом со смещения, равному размеру загруженных позицйй (в байтах, его же укажешь 6 параметром при спецификации атрибута uv) дописываешь текстурные координаты. Ну или объедини все атрибуты в структуру вершины, только про смещения не забывай.
Цитата Сообщение от Maksim1307 Посмотреть сообщение
Я до этого ещё не дошел, мне лишь бы нормально натянуть текстуру на полигон
Ты же вопрос задал про нагрузку, вот я вопросом и ответил
Цитата Сообщение от Maksim1307 Посмотреть сообщение
И всё же остался открытым другой вопрос
Тебе нужно разобраться, как это всё взаимодействует. В уроках на хабре даже рисунок есть с пояснениями, как данные в буферах интерпретировать и специфицировать.
1
2 / 2 / 0
Регистрация: 04.11.2020
Сообщений: 220
25.05.2021, 00:00  [ТС]
Пока без подсказки. Еще немного попробовал осмыслить связь glVertexAttribPointer с вершинным шейдером и до меня наконец дошло: glVertexAttribPointer нужно вызывать несколько раз для каждого layout (location = ...) в шейдере

Первый аргумент - индекс для layout (location ) в шейдере
Второй аргумент - количество переменных для layout
Третий и четвёртый - надо уточнить
Пятый - общий размер в байтах каждой повторяющейся ячейки.
Шестой - шаг с которым их нужно читать

Добавлено через 1 минуту
Цитата Сообщение от zayats80888 Посмотреть сообщение
Для атрибута с индексом 0 (первый параметр, (location = 0) в программе)
До этого я только что догадался

Добавлено через 2 минуты
Цитата Сообщение от zayats80888 Посмотреть сообщение
Ты же вопрос задал про нагрузку, вот я вопросом и ответил
Ок
Цитата Сообщение от zayats80888 Посмотреть сообщение
Тебе нужно разобраться, как это всё взаимодействует. В уроках на хабре даже рисунок есть с пояснениями, как данные в буферах интерпретировать и специфицировать.
сейчас засуну всё в один массив, перепишу glVertexAttribPointer и буду надеяться, что всё заработает.

Бесконечно благодарен за объяснения
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.05.2021, 00:44
Цитата Сообщение от Maksim1307 Посмотреть сообщение
сейчас засуну всё в один массив, перепишу glVertexAttribPointer и буду надеяться, что всё заработает.
Надо не надеяться, а понимать, как всё работает.
У тебя там еще с вершинами косяки. И матрицы проекции нет.

Короче, для сравнения, вот такие исправления(если сам не справишься):
Кликните здесь для просмотра всего текста
glSlang
1
2
3
4
5
6
7
8
9
10
11
12
13
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aUV;
 
uniform mat4 transform;
 
out vec2 TexCoord;
 
void main()
{
    TexCoord = aUV;
    gl_Position = transform * vec4(aPos, 1.0);
}
glSlang
1
2
3
4
5
6
7
8
9
10
11
12
#version 330 core
out vec4 FragColor;
 
in vec2 TexCoord;
 
// texture sampler
uniform sampler2D texture1;
 
void main()
{
    FragColor = texture(texture1, TexCoord);
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
vector<Vector3<GLfloat>> verts = { 
        Vector3<GLfloat>(-0.5f, -0.5f, 0.0f),
        Vector3<GLfloat>(0.5f, -0.5f, 0.0f),
        Vector3<GLfloat>(0.5f, 0.5f, 0.0f),
        Vector3<GLfloat>(-0.5f, 0.5f, 0.0f)
};
//...
vector<unsigned int> ind = {
        0, 1, 2,
        0, 2, 3
};
mesh.cpp
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
void Mesh::InitMesh() {
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);
    glGenBuffers(1, &EBO);
 
    glBindVertexArray(VAO);
 
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    
    //  считаем размеры/смещения в байтах
    auto verticesSize = static_cast<GLsizeiptr>(vertices.size() * sizeof(Vector3<GLfloat>));
    auto uvsSize = static_cast<GLsizeiptr>(UVs.size() * sizeof(float));
 
    // выделяем память буфера
    glBufferData(GL_ARRAY_BUFFER, verticesSize + uvsSize, nullptr, GL_STATIC_DRAW);
    // загружаем позиции
    glBufferSubData(GL_ARRAY_BUFFER, 0, verticesSize, vertices.data());
    // загружаем UV
    glBufferSubData(GL_ARRAY_BUFFER, verticesSize, uvsSize, UVs.data());
 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), &indices[0], GL_STATIC_DRAW);
 
    // Position attribute
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0/*sizeof(Vector3<GLfloat>)*/, (GLvoid*)0);
    glEnableVertexAttribArray(0);
 
    // Textures attribute
    glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0/*2 * sizeof(GLfloat)*/, (GLvoid*)verticesSize);
    glEnableVertexAttribArray(1);
    std::cout << glGetError() << '\n';
    // load and create a texture
    // -------------------------
 
    //...
0
2 / 2 / 0
Регистрация: 04.11.2020
Сообщений: 220
25.05.2021, 00:47  [ТС]
Я вроде понял что как работает, сделал, чтобы нормально читались вершины, прямоугольник стал как в уроках, но по-прежнему просто коричневый. Наверное, ошибка маленькая и глупая, но тем не менее уже 30 минут я её найти не могу.
Вот так у меня сейчас всё это реализовано:
Mesh.cpp
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
//<...>
void Mesh::InitMesh() {
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);
    glGenBuffers(1, &EBO);
 
    glBindVertexArray(VAO);
 
    //заполняем буфферы
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_STATIC_DRAW);
 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, indices.size() * sizeof(unsigned int), &indices[0], GL_STATIC_DRAW);
 
 
    //пишем, как нужно читать информацию из буфферов. Для каждого layout(location) в шейдере
    // Position attribute
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);
 
    //color attribute
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float)));
    glEnableVertexAttribArray(1);
 
    // Textures attribute
    glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));
    glEnableVertexAttribArray(2);
 
 
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture); // all upcoming GL_TEXTURE_2D operations now have effect on this texture object
    // set the texture wrapping parameters
    //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // set texture wrapping to GL_REPEAT (default wrapping method)
    //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    //// set texture filtering parameters
    //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    // load image, create texture and generate mipmaps
    int width, height, nrChannels;
    // The FileSystem::getPath(...) is part of the GitHub repository so we can find files on any IDE/platform; replace it with your own image path.
    unsigned char *data = stbi_load("../src/GameSource/StandartSource/Textures/anypics.ru-56720.jpg", &width, &height, &nrChannels, 0);
 
    if (data)
    {
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
        glGenerateMipmap(GL_TEXTURE_2D);
    }
    else
    {
        std::cout << "Failed to load texture" << std::endl;
    }
 
    std::cout << "\n\nquality is " << width << " * " << height << "\n\n";
    stbi_image_free(data);
    glBindTexture(GL_TEXTURE_2D, 0);
 
    glBindVertexArray(0);
}
void Mesh::Draw() {
 
    // bind Texture
    glBindTexture(GL_TEXTURE_2D, texture);
 
    // create transformations
    glm::mat4 transform = glm::mat4(1.0f); // make sure to initialize matrix to identity matrix first
 
    // get matrix's uniform location and set matrix
    meshShader.Use();
    unsigned int transformLoc = glGetUniformLocation(meshShader.Program, "transform");
    glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(transform));
 
 
    glBindVertexArray(VAO);
 
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
    glBindVertexArray(0);
    glUseProgram(0);
}
//<...>
StandartShader.vert
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
layout (location = 2) in vec2 aTexCoord;
 
out vec3 ourColor;
out vec2 TexCoord;
 
void main()
{
    gl_Position = vec4(aPos, 1.0);
    ourColor = aColor;
    TexCoord = aTexCoord;
}
StandartShader.frag
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#version 330 core
 
in vec3 ourColor;
in vec2 TexCoord;
 
out vec4 FragColor;
 
// texture sampler
uniform sampler2D texture1;
 
void main()
{
    FragColor = texture(texture1, TexCoord);
}
Добавлено через 2 минуты
Цитата Сообщение от zayats80888 Посмотреть сообщение
Короче, для сравнения, вот такие исправления(если сам не справишься):
Забыл обновить страницу. Сейчас посмотрю что не так
0
2 / 2 / 0
Регистрация: 04.11.2020
Сообщений: 220
25.05.2021, 01:20  [ТС]
Переделал ещё раз, уже с вашим кодом. Результат тот же, прямоугольник есть, отображается как надо, но текстура накладывается неправильно, полигон просто коричневый. В силу своей криворукости, я мог переписать два раза неправильно
Вложения
Тип файла: zip opengl_template.zip (12.05 Мб, 6 просмотров)
0
 Аватар для zayats80888
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
25.05.2021, 01:33
Цитата Сообщение от Maksim1307 Посмотреть сообщение
В силу своей криворукости, я мог переписать два раза неправильно
Вершинный шейдер не тот.

И ещё, зачем закомментировал установку параметров текстуры?
1
2 / 2 / 0
Регистрация: 04.11.2020
Сообщений: 220
25.05.2021, 01:38  [ТС]
Странно, в CLion у меня написан нужный шейдер, а если этот же файл открыть из блокнота, шейдер там старый, несмотря на то, что я всё сохранял. Ну в общем не важно, отредактировал шейдер через блокнот и текстура появилась.
Огромное спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2021, 01:38

Не компилируется программа [bcc32 Error]
Помогите пожалуйста исправить ошибки в коде Все исходные коды взяты с разных тем вашего форума! P.S Пытаюсь программку собрать,а...

Ошибка "Build error: Multiple tools write to the same file."
Пробовал в средах: IAR Embeddid Workbench 8.11 и IAR Embeddid Workbench 7.50. Ошибка все равно остается. Было найдено такое решение: ...

Ошибка error: unable to write sha1 filename '...' function not implemented
Ребят, Всем привет. Подскажите пожалуйста, в чем может быть проблема? Ошибка возникает при git push

Ошибка после установки Ubuntu 16.04 LTS error:attempt to read or write outside of disk 'hd0'
Я поставил новый жесткий диск.Поставил винду,не мог работать потому-что постоянно повреждался файл,по моему,BCD,отвозили в ремонт...

Не компилируется программа, в чем ошибка?
Не работает программа,в чем ошибка,может кто подсказать ? Найти площадь ромба, если известны длина большей диагонали и градусная мера...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru